2012-05-11 6 views
0

J'ai une table avec une valeur booléenne et je veux savoir si un groupe d'id a les deux valeurs.mysql select true if ... instruction satisfait deux critères

Ce sql sélectionne le groupe de produits que je veux tester:

SELECT 
    cp.ItemID, 
    cp.IsUnitsOfMeasure 
from grouped_products gp 
LEFT JOIN products p ON p.product_id = gp.product_id 
LEFT JOIN c_products cp ON cp.ItemID = p.product_id 
WHERE gp.group_id=123 

Je veux savoir si cp.IsUnitsOfMeasure pour le groupe contient à la fois 1 et 0.

Répondre

0
SELECT gp.group_id, 
     SUM(cp.IsUnitsOfMeasure=0) AND SUM(cp.IsUnitsOfMeasure=1) AS ContainsBoth, 
FROM  grouped_products AS gp 
    LEFT JOIN products  AS p USING (product_id) 
    LEFT JOIN c_products AS cp ON cp.ItemID = p.product_id 
GROUP BY gp.group_id 

ContainsBoth sera TRUE ou FALSE pour indiquer si chaque groupe respectif contient les deux un c_product avec IsUnitsOfMeasure=0et un autre avec =1.

1

Essayez ceci:

SELECT 
    cp.ItemID, 
    SUM(cp.IsUnitsOfMeasure) AS sum, 
    COUNT(cp.IsUnitsOfMeasure) AS count, 
    from grouped_products gp 
LEFT JOIN products p ON p.product_id = gp.product_id 
LEFT JOIN c_products cp ON cp.ItemID = p.product_id 
WHERE gp.group_id=123 
  • si sum est égal à count alors toutes les lignes sont à 1
  • si sum est égale à 0, toutes les lignes sont à 0
  • dans tous les autres cas: vous avez à la fois 1 et 0 dans le groupe
+0

Merci, cette réponse est en fait plus utile pour moi même si l'autre réponse était plus liée à ce que j'avais demandé. – charliefarley321