2015-09-02 52 views
0

我有數據按照下表,我傳遞一個數字列表,並需要raceId其中所有數字出現在該比賽的數據列中。SQL選擇和分組依據條款

+-----+--------+------+ 
| Id | raceId | data | 
+-----+--------+------+ 
| 14 |  1 | 1 | 
| 12 |  1 | 2 | 
| 13 |  1 | 3 | 
| 16 |  1 | 8 | 
| 47 |  2 | 1 | 
| 43 |  2 | 2 | 
| 46 |  2 | 6 | 
| 40 |  2 | 7 | 
| 42 |  2 | 8 | 
| 68 |  3 | 3 | 
| 69 |  3 | 6 | 
| 65 |  3 | 7 | 
| 90 |  4 | 1 | 
| 89 |  4 | 2 | 
| 95 |  4 | 6 | 
| 92 |  4 | 7 | 
| 93 |  4 | 8 | 
| 114 |  5 | 1 | 
| 116 |  5 | 2 | 
| 117 |  5 | 3 | 
| 118 |  5 | 8 | 
| 138 |  6 | 2 | 
| 139 |  6 | 6 | 
| 140 |  6 | 7 | 
| 137 |  6 | 8 | 
+-----+--------+------+ 

例子我通過在1,2,7我會得到下面的Id:

2 and 4 

我已經嘗試了簡單的聲明

SELECT * FROM表WHERE((數據= 1)或(數據= 2)或(數據= 7))

但我真的不明白分組的條款或事實上,如果它是這樣做的正確方法。

+1

你的問題是什麼?你已經嘗試了什麼? – mustaccio

+0

你的代碼在哪裏!你到目前爲止嘗試過什麼? – Marusyk

+0

你如何通過名單? –

回答

1
select raceId 
from yourtable 
where data in (1,2,7) 
group by raceId 
having count(raceId) = 3 /* length(1,2,7) */ 

這是假設raceId,數據對是唯一的。如果它不是你應該使用的

​​3210
0
SELECT DISTINCT raceId WHERE data IN (1, 2, 7) 
+1

這不會提供OP請求的結果。 IN將返回數據與列表中的任何項目匹配的所有raceID,而不是如指示的那樣。 – rwking

+0

啊 - 我錯過了這一點 - 可能太快地讀出了這個問題,並假設任何。 –

0

這是「set-set-set」查詢的示例。我喜歡用group byhaving解決這些問題。

select raceid 
from races 
where data in (1, 2, 7) 
group by raceid 
having count(*) = 3; 
+0

謝謝戈登看起來就像我需要的東西。我真的不明白計數位 - 我認爲它涉及查詢中'數字'的數量? –

+0

@SteveH。 。 。它確保有三場比賽。 –