SQL - 当满足两个条件时不显示行
起初我以为我可以在我的查询的WHERE
子句中完成此操作,并使用CASE
(请参见下文),但我在获取需要的结果时遇到了一些麻烦。此查询将获取数据库中客户端的产品信息。如果某个产品是由某个客户订购的,我根本不需要返回行。问题是,如果我删除了该产品,那么任何其他具有该产品的客户都将显示出来,因为任何客户都可以订购该产品。我很难完成这个任务。SQL - 当满足两个条件时不显示行
Select
OrderNumber, Client, Product From Orders
WHERE
Product not in(CASE WHEN client = 'client_a' and product = 'product_1' THEN Product END)
希望看到这样的结果,问题的关键是,以示对所有客户product_1除了client_a:
ordernumber client product
123 client a product 2
456 client b product 1
789 client b product 2
这是因为该方式NOT IN
作品。如果列表中的任何值为NULL,则它将不返回结果。例如
SELECT [TestColumn] = 3
WHERE 3 NOT IN (1, 2, NULL)
将不返回结果,而不是3
如果扩大到例如同等或声明,你会明白为什么:
WHERE 3 != 1
AND 3 != 2
AND 3 != NULL
由于3 != NULL
计算结果为假,因为没有等于NULL语句返回false。
您可以通过3种方式完成所需结果。
1)在你的case语句使用ELSE
,以确保没有NULL
结果
SELECT OrderNumber, Client, Product
FROM Orders
WHERE Product not in(CASE WHEN client = 'client_a' and product = 'product_1' THEN Product ELSE '' END)
2)改变IN
不相等的,因为你的case语句只会返回值为1反正
SELECT OrderNumber, Client, Product
FROM Orders
WHERE Product != (CASE WHEN client = 'client_a' and product = 'product_1' THEN Product END)
3 )修改你的逻辑,这个可以改写为
SELECT OrderNumber, Client, Product
FROM Orders
WHERE NOT (Product = 'product_1' AND Client = 'Client_a')
我看到所有这一切背后的逻辑,但它不适用于我的查询。显然我发布了一个通用查询,所以它可能是我的查询中的东西。生病看我能否解决它,否则生病发表编辑 – wondergoat77
没关系,是一个数字在我的查询1位数字,这有效奇迹,谢谢! – wondergoat77
SELECT OrderNumber, Client, Product
FROM Orders
WHERE Client <> 'client_a' OR Product <> 'product_1'
或者语义等价的,也许更容易一些,看看为什么这个工程:
SELECT OrderNumber, Client, Product
FROM Orders
WHERE NOT (Client = 'client_a' AND Product = 'product_1')
试试这个:
SELECT OrderNumber, Client, Product
FROM Orders
WHERE Client != 'client_a'
OR Product != 'product_1'
;
我想你了复杂的东西很简单,你不只是想:
SELECT
OrderNumber, Client, Product
FROM Orders
WHERE Product != 'product_1'
AND client = 'client_a'
你ou你有没有收到? – Woot4Moo
基本上与上面相同,但添加一行显示客户端与产品1 – wondergoat77