[英]How to use WHERE statement in SQL to exclude a group
我有一个复杂的查询,但这是我要执行的操作的本质
在这样的表格中:
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')
在查询中使用某种形式的循环语句会给我的项目带来全新的头痛,因此我希望任何聪明的人都可以帮助我完成我的任务。
有很多方法。 每个人都有其优点,这取决于您的RDBMS以及您最容易阅读的内容。 有关性能的更多详细信息,请参见此处 ,并检查执行计划或进行一些测试,以获得最适合您需求的解决方案。
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
)
SELECT t1.Col1
FROM Table1 t1
WHERE NOT EXISTS
(SELECT t2.Col1
FROM Table1 t2
WHERE t2.col2 = 0
AND t2.col1 = t1.col1)
SELECT Col1
FROM YourTable
WHERE Col2 = 1
EXCEPT
SELECT Col1
FROM YourTable
WHERE Col2 <> 1;
尝试:
SELECT Col1
FROM Table1
GROUP BY Col1
HAVING COUNT(DISTINCT Col2)=1 and MAX(Col2)='1'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.