Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [mysql] Unione tabelle

  1. #1

    [mysql] Unione tabelle

    Ciao a tutti, avrei bisogno di un consiglio per l'unione di alcune tabelle mysql.
    Semplifico la spiegazione per comodità.

    Allora poniamo che io ho due tabelle fatte così:

    Tabella 1:
    campo 1 | campo 2 | campo 3 | campo 4

    Tabella 2:
    campo 1 | campo 5 | campo 6 | campo 7

    E voglio ottenere una terza tabella fatta così:

    Tabella 3:

    campo 1 | campo 2 | campo 3 | campo 4 | campo 5 | campo 6 | campo 7

    Ovviamente l'unico campo che hanno in comune è il campo 1, ma c'è una complicazione.
    Il campo 1 in alcuni casi ha corrispondenze (cioè lo stesso valore intendo), sia per la tabella 1 (che è più grande della 2), che per la tabella 2, ma in alcuni casi non ha corrispondenze. Quando non ha corrispondenze, io vorrei che i campi della tabella 2 vengano semplicemente lasciati vuoti (NULL), ma che venga comunque inserita la riga nella tabella 3.

    Qual è il processo esatto?
    Grazie mille ^^

  2. #2
    Ho risolto a sorpresa
    Grazie lo stesso..

  3. #3
    cantato vittoria troppo presto
    con una join mi estrae solo i valori presenti in entrambe le tabelle...

  4. #4
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Usa una OUTER JOIN

  5. #5
    Sì ho usato una left join.
    Ma c'è un problema.
    Finchè uso una join, mi fa l'unione ma ovviamente senza includere i campi senza corrispondenza. Se scrivo left join, mi si blocca la query e non la esegue O.o. Sta lì, a pensare e non fa nulla...O_O

  6. #6
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Non LEFT JOIN ma OUTER JOIN (che può essere LEFT, RIGHT o FULL).
    La FULL ti fa apparire anche i campi che non trovano corrispondenze, marcandoli con NULL.

    Da Wikipedia

  7. #7
    Sì a me basta una LEFT OUTER, ma outer è opzionale come termine, a quanto so io. FULL ti fa apparire le non-corrispondenze di entrambe le tablelle (ma non è supportato in mysql), mentre left solo della prima (che è il caso che mi serve)

    Da qui

  8. #8
    Ho notato che se metto un limit molto basso (inferiore almeno a 10), la query viene eseguita normalmente.
    Appena lo tolgo o lo aumento, la query si blocca.
    Eppure ho anche indicizzato i campi che vanno ad incrociarsi...come posso fare?

  9. #9
    nessuno sa come evitare che la query si blocchi?

  10. #10
    Vi scrivo la query, magari può essere utile

    in questo caso:
    codice:
    SELECT table_01.*, hcr_2.*  	FROM table_01 LEFT JOIN hcr_2 ON table_01.NUMERO = substr(hdr_2.numero, 1, 13) limit 3
    riesco ad ottenere risultati, mentre in quest'altro caso:

    codice:
    SELECT table_01.*, hcr_2.*  	FROM table_01 LEFT JOIN hcr_2 ON table_01.NUMERO = substr(hdr_2.numero, 1, 13)
    la query si blocca.

    Anche così facendo, la query funziona (ma i risultati ovviamente non sono quelli che voglio):

    codice:
    SELECT table_01.*, hcr_2.*  	FROM table_01 JOIN hcr_2 ON table_01.NUMERO = substr(hdr_2.numero, 1, 13)
    GLi indici sono: table_01.NUMERO e hdr_2.numero.
    Tutti i campi sono VARCHAR, a dispetto del nome.

    In tutto dovrei arrivare ad ottenere circa 47000 record...

    Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.