我有一个复杂的查询,但这是我正在尝试做的事情的本质
在一个看起来像这样的表格中:
Col1 Col2 Bill 0 Bill 0 Bill 0 Bill 1 Bill 1 John 1 John 1 Jonh 1
上表有2列。我试图查询第2列中所有行中“1”的行。由于“Bill”行的行数为“0”和“1”,因此必须排除bill。 WHERE语句中的子查询提供了多个结果,但不起作用。
SELECT t1.Col1
FROM Table1 t1
WHERE t1.Col1 <> (SELECT t1.Col1 FROM Table1 t1 WHERE t1.Col2 <> '0')
在查询中使用循环语句会给我的项目带来全新的麻烦,所以我希望任何聪明的人都可以帮助我完成任务。
答案 0 :(得分:3)
有很多方法。每个都有其优点,取决于您的RDBMS和您最容易阅读的内容。有关性能的更多详细信息,请参阅here并查看执行计划或进行一些测试以获得最适合您需求的解决方案。
SELECT *
FROM Table t1
WHERE t1.Col1 NOT IN (SELECT t1.Col1 FROM Table1 t1 WHERE t1.Col2 <> '0')
或
SELECT t1.*
FROM Table t1
LEFT JOIN
( SELECT Col1
FROM Table
WHERE Col2 <> '0'
) Exc
ON exc.Col1 = t1.Col1
WHERE Exc.Col1 IS NULL
或
SELECT *
FROM Table t1
WHERE NOT EXISTS
( SELECT 1
FROM Table t2
WHERE t2.Col2 <> '0'
AND t1.Col1 = t2.Col1
)
答案 1 :(得分:3)
SELECT t1.Col1
FROM Table1 t1
WHERE NOT EXISTS
(SELECT t2.Col1
FROM Table1 t2
WHERE t2.col2 = 0
AND t2.col1 = t1.col1)
答案 2 :(得分:1)
SELECT Col1
FROM YourTable
WHERE Col2 = 1
EXCEPT
SELECT Col1
FROM YourTable
WHERE Col2 <> 1;
答案 3 :(得分:0)
尝试:
SELECT Col1
FROM Table1
GROUP BY Col1
HAVING COUNT(DISTINCT Col2)=1 and MAX(Col2)='1'