这是一个很大的问题我要在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中做到这一点(在一行中聚合'相同'的客户)?
任何其他建议(也许更优雅)?
由于
答案 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'
)
将输出:
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;