0

这是我必须在 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”作为发布者的客户。显然我不能这样做:

SELECT * from myTable where Publisher <>"MyPubl"

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

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

然后使用 INSTR 检查 MyPub 是否存在于第二个字段中......这个解决方案是我的工作......所以我问你我如何在 SQL 中执行此操作(在一行中聚合“相同”客户)?

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

谢谢

4

3 回答 3

1

也许是这样:

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

或者,如果您只想要客户

SELECT DISTINCT customer FROM myTable
于 2013-11-04T14:04:04.393 回答
1

您可以使用NOT IN子查询:

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

SQL 小提琴演示

这将输出:

CUSTOMER | PUBLISHER | QTY
---------+-----------+-----
CustA    | PublZ     |  20
CustA    | PublF     |  30
CustB    | PublX     |   8
CustC    | PublD     |   9
于 2013-11-04T14:05:58.760 回答
0

还是老派...

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;
于 2013-11-04T14:16:45.837 回答