我已經準備好了更詳細的描述,但我想我會先嚐試簡單的一個。SQL:基本查詢
X Y
7 F
7 F
7 E
7 F
8 F
8 F
我想基於如果搞清楚了X的值(X)存在的F Y中的所有X的相應表的值做別的事情。這意味着7不會削減它,8不會。我如何使用子查詢進行編碼?我使用全部?我寫了一個查詢,但只要有一個匹配而不是全部匹配,就會返回true。
我已經準備好了更詳細的描述,但我想我會先嚐試簡單的一個。SQL:基本查詢
X Y
7 F
7 F
7 E
7 F
8 F
8 F
我想基於如果搞清楚了X的值(X)存在的F Y中的所有X的相應表的值做別的事情。這意味着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演示(甲骨文)
條件@ user963070難道這畢竟幫助嗎? – peterm
一個簡單的方法是使用'GROUP BY'和'HAVING'條款 – peterm