2010-05-03 3 views
0

J'essaie d'écrire un peu de SQL pour SQLITE qui va prendre un sous-ensemble de deux tables (TableA et TableB) et ensuite effectuer un LEFT JOIN.SÉLECTIONNER le sous-ensemble de deux tables et les résultats LEFT JOIN

C'est ce que je l'ai essayé, mais cela produit un résultat erroné:

Select * from TableA 
Left Join TableB using(key) 
where TableA.key2 = "xxxx" 
AND TableB.key3 = "yyyy" 

Ce cas où key2 ignorer = "xxxx" mais key3 = "yyyy"!.

Je souhaite que toutes les lignes de TableA qui correspondent à mes critères correspondent ou non à leur valeur correspondante dans la TableB, mais uniquement aux lignes de la TableB qui correspondent aux deux conditions.

J'ai réussi à résoudre cela en utilisant une vue, mais je suis sûr qu'il doit y avoir une meilleure façon de le faire. Ça commence juste à me rendre fou pour le résoudre maintenant.

(Merci pour toute aide, j'espère que je l'ai bien expliqué).

Répondre

1
Select * 
from TableA 
Left Join TableB on TableA.key = TableB.key 
    and TableB.key3 = "yyyy" 
where TableA.key2 = "xxxx" 
+0

Ah, parfait. Je vous remercie. – Simon

2

Vous avez fait l'erreur de jointure gauche classique. Dans la plupart des bases de données si vous voulez une condition sur la table sur le côté droit de la jointure gauche, vous devez mettre cette condition dans la jointure elle-même et pas la clause where. Dans SQL Server, cela transformerait la jointure gauche en une jointure interne. Je n'ai pas utilisé SQl Lite donc je ne sais pas si c'est pareil mais tous les enregistrements doivent rencontrer la clause where en général.