Cosa significa = *?

Sto cercando di tracciare alcuni SQL in Microsoft Server. Mi sono imbattuto in un join che utilizza una convenzione che non mi è familiare. Cosa significa ” =* “?

 WHERE table1.yr =* table2.yr -1 

Questo:

 WHERE t.column =* s.column 

… è la vecchia syntax di join esterno TSQL (pre SQL Server 2005) e non è un ANSI JOIN.

Riferimento: esterno di SQL Server 2005 Unisciti a Gotcha

Credo che sia la vecchia syntax che indica una condizione di outer join da table1 a table2

Vecchio stile:

 SELECT * FROM table1, table2 WHERE table1.yr =* table2.yr -1 

Nuovo stile (SQL92):

 SELECT * FROM table2 LEFT OUTER JOIN table1 ON table1.yr = table2.yr - 1 

Questa è la syntax del vecchio stile per esprimere i join

Significa che il codice deve essere sostituito immediatamente! Questo join di stile dovrebbe essere un join giusto. Sfortunatamente a volte verrà interpretato come un cross join, quindi i risultati dell’utilizzo di questo join potrebbero non essere corretti. Inoltre, questa syntax è deprecata e non può essere utilizzata nella prossima versione del server SQl.

Questa è la syntax ANSI SQL 1989 per RIGHT OUTER JOIN, dove * = sarebbe il LEFT OUTER JOIN.

Si noti inoltre che l’inserimento della syntax di join nella clausola WHERE è deprecato in SQL 2008. http://scarydba.wordpress.com/2009/09/15/no-join-predicate/ < == Un articolo tempestivo su questo.

Questo è il vecchio stile dei join che erano deprecati in ANSI SQL92. La nuova syntax utilizza INNER e OUTER JOIN che uniscono tabelle basate su espressioni anziché su uguaglianza

A ??? outer join è specificato usando il simbolo = * al posto di = nella clausola WHERE.

yeap, è un’altra syntax per un join esterno sinistro

 a partire dal
 table1 left outer join table2 su table1.yr = table2.yr - 1
 SELECT * FROM table1, table2 WHERE table1.yr =* table2.yr -1 

Significa la stessa cosa di questo:

  SELECT * FROM table2 LEFT OUTER JOIN table1 ON table1.yr = (table2.yr - 1) 

La syntax * è considerata obsoleta e non è in linea con gli standard ANSI.

Oracle ha un costrutto simile come questo:

  WHERE table1.yr (+)= table2.yr 

Per essere chiari e semplici. Questo è un operatore esterno di SQL-92 ( maggiori informazioni )

Non usarlo, è una scuola molto vecchia, ma è simile a SINISTRA SINISTRA, e GIUSTO PARTITO. Tutto ciò che sta facendo è dire da che parte del join si trova il lato “Genitore”, quindi le righe su quel lato saranno considerate per prime.

Se si tenta di eseguire questo su SQL 2005, verrà generato un errore, dicendo che è necessario eseguire questo in modalità compatibile.

Ci sono molte risposte stupide qui. Non hai dato la clausola FROM, quindi non c’è modo di sapere se il tuo * = rappresenta un join esterno a SINISTRA o a DESTRA.

 WHERE table1.yr =* table2.yr -1 

è sicuramente la syntax vecchia per un join esterno. Ma chiunque affermi di sapere se si tratta di un join esterno a SINISTRA o DESTRA è sbagliato. Dipende dall’ordine in cui table1 e table2 sono denominati nella clausola FROM e ciò non è dato.