J'écris une requête SQL pour obtenir tous ces enregistrements de la table A qui correspondent à la table b avec certaines conditions, et tous les enregistrements laissés de côté de la table a, qui ne sont pas là dans la table b. Ci-dessous le code et les tableaux
Tableau A
skey Ordername 100 Pen (Because this is true in table B) 101 any
Tableau b
skey OrderName Key 100 Pen True 100 Cutter select a.skey,a.orderName from Test_A a left join Test_B b on a.skey=b.skey where b.kit='True' and a.orderName=b.orderName
Le résultat dont j'ai besoin est
skey OrderName 100 Pen 100 Cutter 101 any
3 Réponses :
Voici l'idée:
select a.skey, a.orderName from Test_A a left join Test_B b on a.skey = b.skey and a.orderName = b.orderName where b.kit = 'True' or -- matches and value is true b.skey is null. -- no match
Merci de répondre . Mais le fait est que si la table b a 2 valeurs et que rien de tout cela n'a la clé comme vrai, alors j'ai besoin des deux valeurs dans le résultat. Est-ce possible ?
Vous pouvez essayer ci-dessous -
select a.skey,a.orderName from Test_A a left join Test_B b on a.skey=b.skey and a.orderName=b.orderName where b.kit='True' and b.skey is null
Vous pouvez utiliser NOT EXISTS
dans la clause WHERE
comme ceci:
> skey | OrderName > ---: | :-------- > 100 | Pen > 101 | any
Ou sans jointure:
SELECT a.* FROM Test_A a WHERE EXISTS (SELECT 1 FROM Test_B b WHERE b.skey = a.skey AND b.OrderName = a.OrderName AND b.kit = 'True') OR NOT EXISTS (SELECT 1 FROM Test_B b WHERE b.skey = a.skey AND b.kit = 'True')
Voir la démo .
Résultats:
SELECT a.* FROM Test_A a LEFT JOIN Test_B b ON b.skey = a.skey AND b.OrderName = a.OrderName WHERE b.kit = 'True' OR (b.kit IS NULL AND NOT EXISTS (SELECT 1 FROM Test_B WHERE skey = a.skey AND kit = 'True'))
Veuillez apprendre à marquer correctement votre question. MySQL et Oracle sont deux produits complètement différents. Lequel est-ce ???