检查一列 returns 中的一组值是否在 sql

Check whether a column returns a set of values in sql

我有一个 table 有一列,其中仅包含多次出现的数值 1,2 和 3。

SELECT * from table1 where column_name=1

SELECT * from table1 where column_name=2

SELECT * from table1 where column_name=3

我是否可以将这些查询变成单个查询,因为从单个 table 为单个需求调用 3 sql select 查询语句看起来很尴尬。 如果 table 每个条件至少有一行,我需要做一些事情。 我使用了以下查询:

SELECT * 
from table1 
where column_name IN (1,2,3). 

即使 table.I 中不存在具有任何值的列,它 return 数据也需要 return table 如果 table 每个 where 子句至少有一行。

我也试过以下查询:

SELECT *     
FROM table1 
where (column_name =1 
AND column_name =2 AND column_name =3)
//this returns null even if a single column has value 1,2 and 3
SELECT COUNT(DISTINCT column_name) FROM Table1

稍后检查结果是否为 3,这意味着每个数字至少有一行

SELECT column_name, COUNT(1) as Cnt FROM Table1 GROUP BY column_name

这将为您提供每个不同的数字 + 它的计数(您在 table 中有多少次该行)

  DECLARE @numbers AS TABLE(N INT)
  INSERT INTO @numbers VALUES(1), (2), (3)

  SELECT column_name, 
         SUM(CASE WHEN column_name IS NOT NULL THEN 1 ELSE 0 END) AS Cnt
  FROM @numbers 
  LEFT JOIN Table1 ON @numbers.N = column_name
  GROUP BY column_name

这将为您提供所有数字,即使它在表 1 中尚不存在(计数为 0)

您的第一个和第二个查询相同,应该return相同的结果。

SELECT * 
FROM table1 
WHERE column_name IN (1,2,3)

这基本上是说:从表 1 中获取所有行,其中 column_name 是 123.

那是你第三个查询的问题。你正在使用 AND,这不会 return 你的情况,因为 column_name 不能同时是 1, 2 AND 3

如果您只想查看值是否存在(一个或多个),并应用其他过滤器,您可以使用:

WHERE EXISTS(SELECT column_name FROM table1 WHERE (column_name IN (1, 2, 3)))

您可以使用以下查询:

SELECT MAX(CASE WHEN column_name = 1 THEN 1 END) +
       MAX(CASE WHEN column_name = 2 THEN 1 END) +
       MAX(CASE WHEN column_name = 3 THEN 1 END)
FROM table1 

检查是否满足指定条件。

如果 所有三个 (1,2,3) 都包含在 [=15 的 column_name 列中,则以上将 return 3 =](当然在单独的记录中),否则 NULL

您现在可以像这样在 CTE 中使用上述查询:

;WITH CTE AS (
   SELECT MAX(CASE WHEN column_name = 1 THEN 1  END) +
          MAX(CASE WHEN column_name = 2 THEN 1  END) +
          MAX(CASE WHEN column_name = 3 THEN 1  END) AS cnt
   FROM table1
)
SELECT t.*
FROM #table1 AS t
CROSS JOIN CTE 
WHERE cnt = 3

到return的table,如果table满足要求,即如果table包含:

  • 至少有一个行具有column_name = 1
  • 至少有一个行具有column_name = 2
  • 至少有一个 column_name = 3