SQL:基本查询

时间:2013-09-29 00:51:17

标签: sql sql-server

我准备好了更详细的说明,但我想我先尝试一下这个简单的说明。

X    Y
7    F
7    F
7    E
7    F
8    F
8    F

我想做一些其他事情,基于弄清楚对于X的值(x),对应表中的所有x,Y的值是否为Y.这意味着7不会削减它,8会削减它。如何使用子查询对此进行编码?我使用ALL吗?我写了一个查询,但只要有一个匹配而不是全部,它就会返回true。

3 个答案:

答案 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)