如何在where子句中获取多个条件

时间:2018-05-30 06:03:24

标签: sql sql-server tsql sql-server-2012

我想在表格的某些字段上运行查询,但我不明白该怎么做。我的条件是首先需要检查 col1 的值,如果是'W',那么我需要检查 colA 的值是否为''1',' 2'),如果它不是'W',那么我需要检查 colB 的值是否为('1','2')。 这种检查条件('1','2')同样适用于colA和colB,只是取决于col1的值。

我尝试过使用它,但显然这是不正确的。

SELECT * FROM tbl
WHERE CASE WHEN col1= 'W' THEN (colA IN ('1','2')) ELSE (colB IN ('1','2')) END

那么如何在不使用Unions等的情况下在单个查询中执行此操作。

2 个答案:

答案 0 :(得分:3)

您不需要CASE,只需将所有布尔逻辑放在一个表达式中。

SELECT *
FROM T
WHERE
    (Col1 = 'W' AND ColA IN ('1', '2'))
    OR
    (Col1 <> 'W' AND ColB IN ('1', '2'))
;

答案 1 :(得分:1)

enter image description here Sql Server-2014:使用 CASE 根据条件选择要在 WHERE 子句中使用的列 -

SELECT * FROM tab1 
WHERE 
    (CASE WHEN col1= 'W' THEN colA ELSE colB END) in ('1', '2');

在SqlServer-2014上测试。附图像

MySql:使用 IF()函数根据条件选择 WHERE 子句中使用的列 -

SELECT * FROM tab1 
WHERE 
    IF(col1='W', colA, colB) in ('1', '2');