Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL:Abrufen von Datensätzen, die Bedingungen erfüllen, die aus mehreren Datensätzen stammen

Bei Frage:get a list of customers who bought both A and B

SELECT  CustomerID
FROM    CustomerList
WHERE   ProductID IN ('A', 'B')
GROUP   BY CustomerID
HAVING  COUNT(*) = 2

wenn die Eindeutigkeit für ProductID nicht erzwungen wurde für jede CustomerID , DISTINCT Schlüsselwort ist erforderlich,

SELECT  CustomerID
FROM    CustomerList
WHERE   ProductID IN ('A', 'B')
GROUP   BY CustomerID
HAVING  COUNT(DISTINCT ProductID ) = 2

Für die zweite Frage "..A und C und D, aber nicht B und E und F"

SELECT  CustomerID
FROM    CustomerList
WHERE   ProductID IN ('A', 'C', 'D')
GROUP   BY CustomerID
HAVING  COUNT(*) = 3 AND
        CustomerID NOT IN
        (
            SELECT  CustomerID
            FROM    CustomerList
            WHERE   ProductID IN ('B','E','F')
        )