请允许我以非正式的方式分享我的查询(不遵循正确的语法)因为我是新手 - 我的道歉:
select * from table where
(
(category = Clothes)
OR
(category = games)
)
AND
(
(Payment Method = Cash) OR (Credit Card)
)
这是我查询的一部分。另一部分是从上面的输出中,我不想显示符合这些标准的记录:
- 类别=衣服
- 分支= B3或B4或B5
- Customer = Chris
- VIP等级= 2或3或4或5
SQL不是我工作的一部分,但我这样做是为了让我放松一下。所以你可以认为我是新手。我在网上搜索,也许我错过了解决方案。
谢谢,
HimaTech
答案 0 :(得分:0)
有几种方法可以做到这一点(特别是在SQL中 - 不在这里查看MDX)。
最容易理解的方法可能是将要排除的数据集作为子查询,并使用not exists
/ not in
命令。
SELECT * FROM table
WHERE category IN ('clothes', 'games')
AND payment_method IN ('cash', 'credit card')
AND id NOT IN (
-- this is the subquery containing the results to exclude
SELECT id FROM table
WHERE category = 'clothes' [AND/OR]
branch IN ('B3', 'B4', 'B5') [AND/OR]
customer = 'Chris' [AND/OR]
vip_level IN (2, 3, 4, 5)
)
您可以采用的另一种方法是将要排除的结果左键加入到整体结果中,并使用IS NULL
排除这些结果,如下所示:
SELECT t1.*
FROM table
LEFT JOIN
(SELECT id FROM table
WHERE customer = 'chris' AND ...) -- results to exclude
AS t2 ON table.id = t2.id
WHERE t2.id IS NULL
AND ... -- any other criteria
这里的技巧是在进行左连接时,如果连接没有结果,则该值为null。但这肯定更难以理解。
无论采用哪种方式,都会产生不同的性能影响,因此可能值得研究。这可能是一个很好的起点: What's the difference between NOT EXISTS vs. NOT IN vs. LEFT JOIN WHERE IS NULL?