Sto utilizzando SQL Server e sto avendo difficoltà a cercare di ottenere i risultati da una query SELECT
che desidero. Ho provato ad unirmi a diversi ordini e ad usare sottoquery, ma niente funziona nel modo che voglio. Prendi questo esempio forzato di applicazioni software, con diversi livelli di versione, che potrebbero essere installati su computer di persone.SQL Server: più join tabella con una clausola WHERE
Ho bisogno di eseguire un JOIN
con un WHERE
, ma per qualche motivo non riesco a ottenere i risultati che voglio.
Forse sto guardando i miei dati errati, non sono abbastanza sicuro del motivo per cui non riesco a farlo funzionare.
Applicazione tavolo
ID Name
1 Word
2 Excel
3 Powerpoint
Software Table (contiene informazioni sulla versione per le diverse applicazioni)
ID ApplicationID Version
1 1 2003
2 1 2007
3 2 2003
4 2 2007
5 3 2003
6 3 2007
Software_Computer tavolo svincolo
ID SoftwareID ComputerID
1 1 1
2 4 1
3 2 2
4 5 2
Computer tavolo
ID ComputerName
1 Name1
2 Name2
Voglio una query che avrei potuto correre dove mi selezionare un computer specifico per visualizzare la versione del software e l'applicazione è ha, ma voglio anche che per visualizzare quale applicazione non è così hanno (la versione sarebbe un NULL
dal momento che non ha che il software su di esso)
SELECT Computer.ComputerName, Application.Name, Software.Version
FROM Computer
JOIN Software_Computer
ON Computer.ID = Software_Computer.ComputerID
JOIN Software
ON Software_Computer.SoftwareID = Software.ID
RIGHT JOIN Application
ON Application.ID = Software.ApplicationID
WHERE Computer.ID = 1
voglio il seguente risultato impostato
ComputerName Name Version
Name1 Word 2003
Name1 Excel 2007
Name1 Powerpoint NULL
Ma ottengo solo
Results
ComputerName Name Version
Name1 Word 2003
Name1 Excel 2007
ho pensato che il RIGHT JOIN
includerebbe tutti i risultati nella tabella di applicazione, anche se non sono associati con il computer. Cosa mi sfugge/sto sbagliando?
Forse è perché sono alto, ma non stai limitando le applicazioni dal software del computer? E non ci sono solo due software appartenenti al computer 1? Inoltre, non dovrebbe un join di sinistra scavalcare un join destro? Che ho bisogno di controllare. E PowerPoint ha una versione, quindi perché ti aspetteresti nullo? Inoltre, con più versioni per applicazioni, nella tabella software del computer, è necessario mantenere anche un id versione, altrimenti avresti tutti i tipi di risultati incasinati. – frostymarvelous