J'ai un products
table, un produit spécifique peut contenir différents templates, le model 0 représente le model de base:
Select * From products Where product_number = 12345;
Résultat:
id made_by product_number model ---------------------------------- 122 U123 12345 0 123 U123 12345 1 124 U552 12345 2
Maintenant, je voudrais find seulement ces produits où le model de base (model = 0) made_by
value diffère dans certains templates?
Dans cet exemple, je suis vraiment intéressé à avoir ce produit 12345 dans les résultats.
Sur la chose qui me vient à l'esprit est de sélectionner distinct et count, mais peut-être qu'il existe de meilleurs moyens?
Existe est une meilleure façon de le faire, mais vous pouvez le faire avec auto join
aussi comme ci-dessous
Échantillon de restrster
select t1.* from products t1 inner join products t2 on t1.product_number=t2.product_number and t1.made_by<>t2.made_by and t1.model<>0 and t2.model=0;
Exemple de données
select * parmi les produits;
+-----+---------+----------------+-------+ | id | made_by | product_number | model | +-----+---------+----------------+-------+ | 122 | U123 | 12345 | 0 | | 123 | U123 | 12345 | 1 | | 124 | U552 | 12345 | 2 | | 125 | U5 | 12346 | 0 | | 126 | U5 | 12346 | 1 | | 127 | U6 | 12347 | 0 | | 128 | U7 | 12347 | 1 | +-----+---------+----------------+-------+
Sortie
+-----+---------+----------------+-------+ | id | made_by | product_number | model | +-----+---------+----------------+-------+ | 124 | U552 | 12345 | 2 | | 128 | U7 | 12347 | 1 | +-----+---------+----------------+-------+
Vous pouvez utiliser une exists
requête exists
pour vérifier un made_by
différent pour le même product_number
:
select product_number from YourTable yt1 where yt1.model = 0 and exists ( select * from YourTable yt2 where yt1.product_number = yt2.product_number and yt2.made_by <> yt1.made_by )