Perché SQL Management Studio aggiungere un cross join?
-
12-10-2019 - |
Domanda
A volte è necessario eseguire gli aggiornamenti di base su un join. Ad esempio:
UPDATE t1 SET col1 = 'val1'
FROM table1 as t1
INNER JOIN table2 as t2
ON t1.ID = t2.t1_id
WHERE t2.col3 = 'val3'
Questo funziona perfettamente, ma per qualche ragione, in MS SQL Management Studio Express, vuole convertire questo
UPDATE t1 SET col1 = 'val1'
FROM table1 as t1
INNER JOIN table2 as t2
ON t1.ID = t2.t1_id
CROSS JOIN t2
WHERE t2.col3 = 'val3'
Si aggiunge un crossjoin per qualche motivo che non capisco.
Ora la mia domanda è: Perché Management Studio credo che questo è quello che volevo dire? Deve avere un uso effettivo, altrimenti non sarebbe suggerirlo. Eppure non ho idea di come e quando (e perché).
Soluzione
Secondo MSDN a croce uniscono così è equivalente a un inner join. Forse usa croce si unisce perché un cross join possono essere utilizzati per creare prodotti cartesiani e più semplice si unisce -. Mentre un inner join è più limitato
Altri suggerimenti
Deve essere un errore, perché il codice di pugno è rigth.
Prova
Aggiornamento t1 insieme col1 = 'val1' da table1 t1, t2 table2 dove t1.id = t2.t1_id e t2.col3 = 'val3'
Si getta lo stesso risultato, ma potrebbe essere meno efficiente. Does SQL-MS aggiungere alcun codice? Strano ...