web-dev-qa-db-fra.com

Que signifie = *?

J'essaie de tracer du SQL dans Microsoft Server. Je suis tombé sur une jointure qui utilise une convention qui m'est inconnue. Que signifie "=*"?

WHERE table1.yr =* table2.yr -1
58
Shawn H

Ce:

WHERE t.column =* s.column

... est l'ancienne syntaxe de jointure externe TSQL (pre SQL Server 2005) et n'est pas une jointure ANSI.

Référence: SQL Server 2005 Outer Join Gotcha

71
OMG Ponies

Je crois que c'est une ancienne syntaxe indiquant une condition de jointure externe de table1 à table2

Style ancien:

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

Nouveau style (SQL92):

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

C'est l'ancienne syntaxe de style pour exprimer les jointures

16
mjv

Cela signifie que le code doit être remplacé immédiatement! Cette jointure de style est censée être une jointure droite. Malheureusement, il sera parfois interprété comme une jointure croisée, de sorte que les résultats de l'utilisation de cette jointure peuvent ne pas être corrects. En outre, cette syntaxe est obsolète et ne peut pas être utilisée dans la prochaine version du serveur SQl. 

11
HLGEM

Il s'agit de la syntaxe ANSI SQL 1989 pour RIGHT OUTER JOIN, où * = correspond à LEFT OUTER JOIN.

Notez également que l'insertion de la syntaxe de jointure dans la clause WHERE est déconseillée dans SQL 2008. http://scarydba.wordpress.com/2009/09/15/no-join-predicate/ <== A temps article à ce sujet.

7
Bryan S.

Il s'agit de l'ancien style de jointure qui était obsolète en ANSI SQL92. La nouvelle syntaxe utilise INNER et OUTER JOIN, qui joignent les tables en fonction d'expressions plutôt que d'égalité

2
Sailing Judo

UNE ??? La jointure externe est spécifiée en utilisant le symbole = * à la place de = dans la clause WHERE.

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

Signifie la même chose que ceci:

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

La syntaxe * est considérée comme obsolète , et n'est pas conforme aux normes ANSI.

Oracle a une construction similaire comme ceci:

  WHERE table1.yr (+)= table2.yr
0
JosephStyons

yeap, c'est une autre syntaxe pour une jointure externe gauche

 à partir de 
 table1 joint gauche externe table2 sur table1.yr = table2.yr - 1 
0
opensas

Pour être clair et simple. Ceci est un opérateur de jointure externe SQL-92 ( plus d'infos )

Ne l'utilisez pas, c'est une très vieille école, mais c'est similaire à LEFT JOIN et à RIGHT JOIN. Tout ce qu'il fait est de dire de quel côté de la jointure se trouve le côté "Parent", donc les lignes de ce côté être considéré en premier.

Si vous essayez de l'exécuter sur SQL 2005, une erreur s'affichera, indiquant que vous devez l'exécuter en mode de compatibilité.

0
Oakcool