我准备好了更详细的描述,但我想我会先尝试简单的描述。
X Y
7 F
7 F
7 E
7 F
8 F
8 F
我想根据确定对于 X 的值 (x) 是否存在对应表中所有 x 的 Y 中的 F 值来做其他事情。这意味着 7 不会削减它,而 8 会。如何使用子查询对此进行编码?我使用全部吗?我写了一个查询,但只要有一个匹配项而不是全部匹配项,它就会返回 true。
我准备好了更详细的描述,但我想我会先尝试简单的描述。
X Y
7 F
7 F
7 E
7 F
8 F
8 F
我想根据确定对于 X 的值 (x) 是否存在对应表中所有 x 的 Y 中的 F 值来做其他事情。这意味着 7 不会削减它,而 8 会。如何使用子查询对此进行编码?我使用全部吗?我写了一个查询,但只要有一个匹配项而不是全部匹配项,它就会返回 true。
尝试以下查询
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')
Select * from mytable
where X not in ( Select X from mytable
Where Y <> 'F'
)
在大多数主要的 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)