查询中的SQL查询

时间:2016-10-20 22:15:11

标签: sql-server excel powerpivot

请允许我以非正式的方式分享我的查询(不遵循正确的语法)因为我是新手 - 我的道歉:

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

1 个答案:

答案 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?