2013-01-05 11 views
6

Grazie in anticipo per il vostro aiuto:SQL SELECT colonna di join ALIAS

[People] tabella ha due colonne:

  • PersonID
  • PersonName

[Marriages] tabella ha tre colonne:

  • MarriageID
  • PersonIDa
  • PersonIDb

voglio selezionare le seguenti colonne:

  • MarriageID
  • PersonName (per personIDa)
  • PersonName (per personIDb)

Penso di aver bisogno di utilizzare una dichiarazione SELECT con un JOIN, ma non sono sicuro di come assegnare un alias univoco a ciascun PersonName. Questo è ciò che ho finora (che non funziona):

SELECT 
    [Marriages].[MarriageID], 
    [People].[PersonName] AS aName, 
    [People].[PersonName] AS bName 
FROM 
    [Marriages] 
JOIN 
    [People] ON [Marriages].[PersonIDa] = [People].[PersonID] 
JOIN 
    [People] ON [Marriages].[PersonIDb] = [People].[PersonID] 

Grazie ancora ...

+0

Non avrai bisogno di parentesi quadre attorno ai nomi di tabelle e colonne purché non utilizzi parole chiave SQL o caratteri non occidentali –

risposta

7

Questo corrisponde a ciò che stai cercando di realizzare?

SELECT m.[MarriageID], peopleA.[PersonName] AS aName, peopleB.[PersonName] AS bName 
FROM [Marriages] M 
JOIN [People] peopleA ON m.[PersonIDa] = peopleA.[PersonID] 
JOIN [People] peopleB ON m.[PersonIDb] = peopleB.[PersonID] 
2

penso che stai cercando di fare questo ...

SELECT 
m.[MarriageID], 
pa.[PersonName] AS aName, 
pb.[PersonName] AS bName 
FROM [Marriages] m 
JOIN [People] pa ON m.[PersonIDa] = pa.[PersonID] 
JOIN [People] pb ON m.[PersonIDb] = pb.[PersonID]; 
1

Avrete bisogno di qualcosa di simile a:

Select MarriageID, a.PersonName, b.PersonName 
From Marriages m 
Join People a On a.PersonID = m.Person1ID 
Join People b on b.PersonID = m.Person2ID 
1

Non dimenticare che tipo di JOIN è necessario ... "INNER JOIN"/"LEFT OUTER JOIN"/"RIGHT OUTER JOIN"/"CROSS JOIN"

SELECT MarriageID, a.PersonName, b.PersonName 
FROM Marriages m JOIN People a ON a.PersonID = m.Person1ID 
       JOIN People b ON b.PersonID = m.Person2ID 
+0

+1 per menzione su LEFT OUTER JOIN –

-1

Grazie a tutti; i tuoi suggerimenti hanno funzionato perfettamente. Stavo cercando di creare un alias per la colonna ripetuta nell'istruzione SELECT quando avrei dovuto provare a creare un alias per la tabella ripetuta nell'istruzione JOIN.

Per chiunque altro che si imbatte in questo:

SELECT 
[TABLE1 NAME].[TABLE1 COLUMN], 
(TABLE2 ALIAS1).[TABLE2 COLUMN], 
(TABLE2 ALIAS2).[TABLE2 COLUMN], 
FROM [TABLE1 NAME] 
JOIN [TABLE2 NAME] (TABLE2 ALIAS1) ON [TABLE1 NAME].[TABLE1 MATCHING COLUMN] = (TABLE2 ALIAS1).[TABLE2 MATCHING COLUMN] 
JOIN [TABLE2 NAME] (TABLE2 ALIAS2) ON [TABLE1 NAME].[TABLE1 MATCHING COLUMN] = (TABLE2 ALIAS2).[TABLE2 MATCHING COLUMN] 

Il nome alias viene creato nel comunicato JOIN e applicata a dove viene utilizzato nell'istruzione SELECT, non il contrario.

+0

Credi veramente che le persone possano capire questo? Hai reso più complicata la tua query originale. Che ne dici di scrivere l'istruzione SQL corretta piuttosto che confondere le persone con sintassi che non è SQL valido –