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
58
demandé sur Cole Johnson 2009-09-15 20:14:27

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

71
répondu OMG Ponies 2009-09-15 16:21:28

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
25
répondu Eric Petroelje 2009-09-16 12:27:12

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

16
répondu mjv 2009-09-15 16:16:32

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.

11
répondu HLGEM 2009-09-15 16:46:49

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/

7
répondu Bryan S. 2014-05-21 21:09:55

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é

2
répondu Sailing Judo 2009-09-15 16:19:24

Un ??? la jointure externe est spécifiée en utilisant le symbole =* au lieu de = dans la clause WHERE.

1
répondu alex 2009-09-15 19:02:07

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

from
table1 left outer join table2 on table1.yr = table2.yr - 1
0
répondu opensas 2009-09-15 16:21:28
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
0
répondu JosephStyons 2009-09-16 12:46:36

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é.

0
répondu Oakcool 2010-02-19 23:53:01

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é.

-1
répondu Steve Kass 2009-09-15 17:46:58