Domanda

Sto cercando di unire alcuni dati insieme da 2 tavoli, ma su più colonne. ecco un esempio:

  

Sorgente tabella

     

ID | disc | AAAA | BBBB |

     

Tabella 2 tabella

     

ID | Testo | ID1 | ID2 | ID3 |

dove ID1, ID2 e ID3 in Table2 sono ID di dal Sorgente tabella

Mi piacerebbe fare una query che produce i risultati:

Table2.Text,
Source.Desc(ID1),
Source.AAAA(ID1),
Source.Desc(ID2),
Source.AAAA(ID2),
Source.Desc(ID3),
Source.AAAA(ID3)

Mi piacerebbe che questo sarebbe un join, ma non riesco a ottenere la giusta sintassi ... o sarei meglio con un Unione?

È stato utile?

Soluzione

Se non tutte le tabelle di origine vengono inseriti nella Tabella 2, questo sarà ancora vi darà risultati parziali:

SELECT
    t.Desc, s1.Desc, s1.AAAAA, s2.Desc, s2.AAAAA, s3.Desc, s3.AAAA
    FROM Table2                t
        LEFT OUTER JOIN Source s1 ON t.ID1 = s1.ID
        LEFT OUTER JOIN Source s2 ON t.ID2 = s2.ID
        LEFT OUTER JOIN Source s3 ON t.ID3 = s2.ID
    WHERE t.ID=@YourIDHere

Altri suggerimenti

Si potrebbe utilizzare più join, non si potrebbe? Ad esempio:

SELECT tb.Desc, s1.Desc, s1.AAAAA, s2.Desc, s2.AAAAA, s3.Desc, s3.AAAA
FROM Table2 tb
    INNER JOIN Source s1 ON tb.ID1 = s1.ID
    INNER JOIN Source s2 ON tb.ID2 = s2.ID
    INNER JOIN Source s3 ON tb.ID3 = s2.ID

Devi iscriverti alla tabella di origine per tre volte, una per ogni ID. Si potrebbe anche provare un unuion per vedere quale funziona meglio.

Questo è un disegno tavolo cattivo (dovrebbe essere normalizzata) e suggerisco di cambiare ora, se possibile. Ci shoudl bea tabella correlata con l'id in un record separato, allora si potrebbe unirsi a una volta e sarebbe molto più efficiente e molto più facile scrivere codice contro e non si deve cambiare la struttura della tabella e allthe interroga il giorno è necessario ID4.

Tre unisce dovrebbe fare il trucco:

select A.*, coalesce(B1.Text,B2.Text,B3.Text,'') as Text
from Source A
inner join Table2 B1 on B1.ID1=A.ID
inner join Table2 B2 on B2.ID2=A.ID
inner join Table2 B3 on B3.ID3=A.ID
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top