我准备好了更详细的说明,但我想我先尝试一下这个简单的说明。
X Y
7 F
7 F
7 E
7 F
8 F
8 F
我想做一些其他事情,基于弄清楚对于X的值(x),对应表中的所有x,Y的值是否为Y.这意味着7不会削减它,8会削减它。如何使用子查询对此进行编码?我使用ALL吗?我写了一个查询,但只要有一个匹配而不是全部,它就会返回true。
答案 0 :(得分:1)
尝试以下查询
select distinct X from temp
except
select X from temp where Y!='F' -- x,y columns, temp -> table
--Query select all distinct X which has all Y as F
以下是对同一
的替代查询select distinct X from temp where not exists (select X from temp where Y='E')
答案 1 :(得分:1)
Select * from mytable
where X not in ( Select X from mytable
Where Y <> 'F'
)
答案 2 :(得分:1)
在大多数主要的RDBMS
中,您可以在没有这样的子查询的情况下执行此操作SELECT x
FROM table1
GROUP BY x
HAVING COUNT(*) = SUM(CASE WHEN Y = 'F' THEN 1 ELSE 0 END)
或
SELECT x
FROM table1
GROUP BY x
HAVING MAX(CASE WHEN Y <> 'F' THEN 1 ELSE 0 END) = 0
输出:
| X | |---| | 8 |
这是 SQLFiddle 演示(MySQL)
这是 SQLFiddle 演示(SQL Server)
这是 SQLFiddle 演示(Oracle)