SQL:获取满足来自多个记录的条件的记录

Art*_*hur 1 mysql sql

如果客户购买了某种产品,我们可以使用一个简单的表格将客户ID与产品ID相关联.我正在寻找一个SQL(MySQL),它列出了购买特定产品的所有客户.

CustomerID  ProductID
    1          A         // customer 1 bought product A
    2          A
    1          B
    3          A
    2          C
    3          B

我希望得到谁买的客户名单 A和B(顾客1和3),谁买了一个客户,但不是B(客户2).我需要为2个以上的产品做这件事,大约10个,比如"A和C和D但不是B和E和F".

Joh*_*Woo 5

如有问题: 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
Run Code Online (Sandbox Code Playgroud)

如果ProductID每个都没有强制执行唯一性CustomerID,DISTINCT则需要关键字,

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

对于第二个问题,".. A和C和D但不是B和E和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')
        )
Run Code Online (Sandbox Code Playgroud)