如何只获取列中没有特定值的行

时间:2013-11-04 13:58:10

标签: mysql sql

这是一个很大的问题我要在sql中解决,但我不知道如何。 这是我的数据集:

customer; publisher; qty

这是一个数据样本:

CustA;  PublX;  10
CustA;  PublZ;  20
CustA;  PublF;  30
CustB;  PublX;   8
CustC;  PublD;   9 
CustD;  PublX;   9
CustD;  MyPub;  18
CustE;  PublZ;   3
CustE;  MyPub;   8

我需要执行一个查询,只有客户没有“MyPubl”作为发布者。 显然我做不到:

来自myTable的SELECT *,其中Publisher<>“MyPubl”

一个解决方案可以是我创建一个子集表,将客户聚合在一行中,如下所示:

CustA; PublX PublZ PublF; 60
CustB; PublX; 8
etc...

然后用INSTR检查MyPub是否存在于第二个字段中... 这个解决方案我的工作..所以我问你我怎样才能在SQL中做到这一点(在一行中聚合'相同'的客户)?

任何其他建议(也许更优雅)?

由于

3 个答案:

答案 0 :(得分:1)

也许这个:

SELECT * FROM myTable 
WHERE customer NOT IN (SELECT customer FROM myTable WHERE Publisher = "MyPubl")

或者,如果您只是想要客户

SELECT DISTINCT customer FROM myTable

答案 1 :(得分:1)

您可以将NOT IN与子查询结合使用:

SELECT
    customer,
    publisher,
    qty
FROM
    books
WHERE
    customer NOT IN (
        SELECT
            DISTINCT customer
        FROM
            books
        WHERE
            publisher = 'MyPub'
    )

SQL Fiddle Demo

将输出:

CUSTOMER | PUBLISHER | QTY
---------+-----------+-----
CustA    | PublZ     |  20
CustA    | PublF     |  30
CustB    | PublX     |   8
CustC    | PublD     |   9

答案 2 :(得分:0)

或旧skool ......

SELECT DISTINCT x.customer 
           FROM my_table x 
           LEFT 
           JOIN my_table y 
             ON y.customer = x.customer 
            AND y.publisher = 'MyPub' 
          WHERE y.customer IS NULL;