2013-09-29 93 views
0

我已經準備好了更詳細的描述,但我想我會先嚐試簡單的一個。SQL:基本查詢

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

我想基於如果搞清楚了X的值(X)存在的F Y中的所有X的相應表的值做別的事情。這意味着7不會削減它,8不會。我如何使用子查詢進行編碼?我使用全部?我寫了一個查詢,但只要有一個匹配而不是全部匹配,就會返回true。

+0

一個簡單的方法是使用'GROUP BY'和'HAVING'條款 – peterm

回答

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

Select * from mytable where X not in (Select X from mytable Where Y <> 'F' )

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演示(甲骨文)

+0

條件@ user963070難道這畢竟幫助嗎? – peterm