Ce n' =* moyenne?
J'essaie de tracer du SQL dans Microsoft Server. Je suis tombé sur une jointure qui utilise une convention inconnue pour moi. Que signifie " =*
"?
WHERE table1.yr =* table2.yr -1
11 réponses
Ceci:
WHERE t.column =* s.column
... est une ancienne syntaxe de jointure externe TSQL (pre SQL Server 2005) et n'est pas une jointure ANSI.
Référence: SQL Server 2005 Jointure Externe Gotcha
Je crois que c'est une ancienne syntaxe indiquant une condition de jointure externe de table1 à table2
Vieux style:
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
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 de SQl server.
C'est la syntaxe ANSI SQL 1989 pour la jointure externe droite, où *= serait la jointure externe gauche.
Vous devriez également noter que mettre la syntaxe de jointure dans la clause WHERE est obsolète dans SQL 2008. http://scarydba.wordpress.com/2009/09/15/no-join-predicate/
C'est L'ancien style de jointures qui étaient obsolètes dans ANSI SQL92. La nouvelle syntaxe utilise la jointure interne et externe qui joint des tables basées sur des expressions plutôt que sur l'égalité
Un ??? la jointure externe est spécifiée en utilisant le symbole =* au lieu de = dans la clause WHERE.
Yeap, c'est une autre syntaxe pour une jointure externe gauche
from table1 left outer join table2 on table1.yr = table2.yr - 1
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 semblable construction comme ceci:
WHERE table1.yr (+)= table2.yr
Pour être clair et simple. Ceci est un opérateur de jointure externe SQL-92 ( plus d'informations )
Ne l'utilisez pas, c'est 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 est le côté "Parent", donc les lignes de ce côté seront considérées en premier.
Si vous essayez de l'exécuter sur SQL 2005, il lancera une erreur, indiquant que vous devez l'exécuter en mode de compatibilité.
Il y a beaucoup de réponses stupides ici. Vous n'avez pas donné la clause FROM, donc il n'y a aucun moyen de dire si votre * = représente une jointure externe gauche ou droite.
WHERE table1.yr =* table2.yr -1
Est une ancienne syntaxe pour une jointure externe, à coup sûr. Mais quiconque prétend savoir si c'est une jointure externe gauche ou droite se trompe. Cela dépend de l'ordre dans lequel table1 et table2 sont nommés dans la clause FROM, et cela n'est pas donné.