2011-10-28 1 views
3

J'étais juste curieux de savoir pourquoi l'opérateur *= pour left outer join et les '= *' pour 'jointure externe droite ont été retirés de la norme SQL, ou, au moins, pas pris en charge par SQL Server 2005 et? J'ai lu quelques autres articles sur cet opérateur particulier et je comprends qu'il peut donner des résultats inattendus. Mais s'il était sémantiquement équivalent, je penserais que ce serait un opérateur plus facile à utiliser quand il faut joindre plusieurs tables. Si quoi que ce soit, je préfère utiliser cet opérateur pour créer dynamiquement des requêtes SQL plutôt que d'essayer d'obtenir l'ordre correct des mots comme:Qu'est-il arrivé aux * = et = * pour les jointures externes dans SQL?

FROM accounts 
LEFT OUTER JOIN customers 
ON accounts.accountnum = customers.accountnum 
LEFT OUTER JOIN products 
ON customers.accountnum = products.accountnum 
AND customers.id = products.customerid 

FROM accounts, customers, products 
WHERE accounts.accountnum *= customers.accountnum AND 
     customers.accountnum *= products.accountnum AND 
     customers.id *= products.customer.id 

semblerait être plus facile à analyser ensemble .

Mais revenons au monde réel, quelle était l'idée de ces opérateurs s'ils ne réalisaient pas une "vraie" jointure externe? Le terme Short Hand implique qu'il devrait faire exactement la même chose, mais pas évidement dans ce cas.

+0

Pouvez-vous fournir une référence à leur utilisation? Je n'ai jamais entendu parler de ces opérateurs. Au strict minimum, je dirais qu'ils se sentent trop mûrs pour causer de la confusion sur d'éventuelles fautes de frappe ... –

+0

@ X-Zero: Très commun il n'y a pas si longtemps, disons dix ans. La prise en charge de SQL-92 était limitée à ce moment-là et il existe un ** lot ** de code hérité qui utilise cette syntaxe de jointure. – Dave

+0

Je suis assez sûr que les versions Oracle supportent cette syntaxe depuis longtemps ... – Sparky

Répondre

1

Je ne pense pas qu'ils ont été retirés de la norme. Je pense qu'ils n'y ont jamais été. Ils étaient juste une convention que les fournisseurs ont suivi jusqu'à ce que SQL-92 soit sorti et les fournisseurs ont décidé que cela valait la peine de l'implémenter.

1

Effectuez une recherche sur google pour l'article Chris Date, «Connexion externe avec No Nulls et moins de larmes», antérieur à la norme SQL-92. Bien que je n'ai pas pu trouver une copie gratuite en ligne, j'ai trouvé un document qui analyse l'article et donne un joli historique de la jointure externe en SQL. Notez de nos jours que Date attribuerait des attributs relationnels pour ce type de requête et vous inciterait à éviter généralement les jointures externes;)

Questions connexes