【问题标题】:T-SQL - how to compare a SELECT resultset and IN list [duplicate]T-SQL - 如何比较 SELECT 结果集和 IN 列表 [重复]
【发布时间】:2016-04-12 00:23:51
【问题描述】:

我有一个查询,并且在它的 WHERE 子句中,我只想在一个 SELECT 语句的结果集在预定义值列表中时添加一个 AND 条件,否则不应添加该条件

SELECT 
    field1, field2, field3 ....
FROM 
    Table1 
JOIN 
    Table2 ON somekeymappings
WHERE 
    condition1 
    AND condition2 
    AND IF (SELECT ids from TABLE2) IN (1001, 1002, 1003, 1004, 1005, 1006)
        THEN condition3
GROUP BY 
    blah, blah, blah
HAVING 
    blah, blah

【问题讨论】:

标签: sql-server tsql parameter-passing case conditional-statements


【解决方案1】:
SELECT field1, field2, field3 ....
FROM Table1 JOIN Table2 ON somekeymappings
WHERE condition1 AND condition2 
AND (table2.id IN (1001, 1002, 1003, 1004, 1005,1006) AND condition3 
     OR table2.id NOT IN (1001, 1002, 1003, 1004, 1005,1006)) 
GROUP BY blah, blah, blah
HAVING blah, blah

【讨论】:

    【解决方案2】:
      SELECT field1, field2, field3 ....
        FROM Table1 JOIN Table2 on somekeymappings
        WHERE condition1 
              AND condition2 
              AND EXISTS (SELECT null from TABLE2 where id IN (1001, 1002, 1003, 1004, 1005,1006))
        THEN condition3
        GROUP BY blah, blah, blah
        HAVING blah, blah
    

    【讨论】:

      【解决方案3】:

      您所描述的 IF...THEN 操作可以表示为一个简单的逻辑语句。

      如果 A 那么 B 也可以表示为 B或不是A

      因此,您的陈述将按如下方式工作:

      SELECT field1, field2, field3 ....
      FROM Table1 JOIN Table2 on somekeymappings
      WHERE condition1 
            AND condition2 
            AND (condition3 
                 OR Table2.Id NOT IN (1001, 1002, 1003, 1004, 1005,1006)
                )
      GROUP BY blah, blah, blah
      HAVING blah, blah
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-20
        • 1970-01-01
        • 1970-01-01
        • 2023-02-03
        • 2023-04-05
        • 1970-01-01
        相关资源
        最近更新 更多