2010-12-01 4 views
1

Je suis complètement autodidacte, donc il y a des lacunes évidentes dans mes connaissances. Quand je devais être capable d'obtenir des données de plus d'une table, j'ai appris à faire des jointures. Par exemple, si je besoin d'un numéro de bon, numéro de compte et le solde de la table bons et une adresse correspondant d'une autre table, je ferais ceci:Se joint à d'autres méthodes dans mySQL

select v.voucherNbr, v.balanceInit, v.acctID, a.address, a.city from vouchers v 
left join addresses a on v.acctID = a.id 

qui reviendraient tous les enregistrements de bons, et tout adresses qui existent (dans ce cas, nous souhaitons renvoyer des enregistrements de bon même s'il n'y a pas d'adresse correspondante, d'où la jointure gauche).

J'ai récemment hérité du code qui semble essayer d'obtenir les mêmes données (et dans ce cas, il renvoie les enregistrements corrects) qui le fait comme ceci:

select v.voucherNbr, v.balanceInit, v.acctID, a.address, a.city from vouchers v, addresses a 
where v.acctID = a.id 

Quelqu'un peut-il m'expliquer les implications de faire cela au lieu d'utiliser une jointure. Comme je l'ai dit, dans ce cas particulier, il retourne les mêmes données que la jointure, mais le ferait-il toujours?

Répondre

3

C'est une jointure, juste implicite. Ceci est une mauvaise pratique de codage et devrait être remplacé par une jointure interne. Le problème avec ce code obsolète est qu'il est très facile de créer accidentellement une jointure croisée et que votre code est plus difficile à maintenir (vous ne devez pas mélanger les jointures implicites et explicites dans la même requête ou vous pourriez obtenir des résultats erronés).

4

Il s'est simplement avéré que les résultats étaient les mêmes, mais à un moment donné, car votre requête a une jointure externe, la syntaxe qu'ils vous ont fournie est une jointure interne implicite.

http://en.wikipedia.org/wiki/Join_(SQL)