2011-04-11 2 views
1

Possible en double:
SQL left join vs multiple tables on FROM line?quand utiliser joint ou simple 2 condition de la table?

Je pense que cela est beaucoup plus claire:

"SELECT * FROM t1,t2 WHERE t2.foreignID = t1.id " 

qu'une requête avec une jointure.

Y at-il des spécifications sur quand utiliser l'un ou l'autre?

Merci

+0

Avec la seule exception que c'est la discussion 'LEFT JOIN' là. Il y a une différence entre list-of-tables-separated-by-virgule et 'left join', mais aucune différence avec' inner join' – zerkms

Répondre

2

Personnellement, je préfère l'explicitation de

SELECT t1.*, t2.* 
FROM t1 
JOIN t2 ON t1.id = t2.foreignID 

J'aime voir exactement ce que mes JOIN conditions sont, et j'utilise WHERE pour filtrer davantage les résultats (année en cours, seulement certain utilisateur, etc.). Cela ne devrait pas avoir d'importance dans une simple requête comme celle-ci, mais cela aidera certainement avec des requêtes plus longues et plus complexes.

Il n'a pas de sens pour moi d'avoir un style pour des requêtes plus courtes et un autre pour les plus longues. Habituellement, les simples se transforment en requêtes complexes assez tôt.

0

C'est une jointure cartésienne qui est en fait très, très légèrement différent d'une jointure. Plus de 99,99% du temps, vous obtiendrez des résultats identiques. Mais il y a des cas limites qui vont courir beaucoup plus lentement, ou éventuellement donner des rangées supplémentaires. Mais vous êtes plus susceptible de rencontrer des problèmes d'analyse lorsque vous ajoutez des jointures à gauche. La documentation MySQL donne un peu d'explication, mais pas beaucoup. Les différences résident dans la façon dont l'optimiseur de requête choisit comment analyser les tables.

Ce format devient aussi confus quand vous commencez à ajouter d'autres conditions dans votre clause WHERE.

Questions connexes