2013-02-18 83 views
0

我需要的是:當我給training_id 172和174 training_id它必須返回用戶150只

enter image description here使用AND條件MYsql的

我試過,但它doen't工作

SELECT user_id FROM Training_users WHERE training_id = 172 AND training_id = 174 

大部分的時間training_id可能會超過2

+0

您在此表中的主鍵是什麼? – 2013-02-18 12:28:40

+0

user_id和training_id – Fury 2013-02-18 12:30:48

+0

問題是你的PK是在兩個領域,所以唯一性只存在於這兩個領域,因此你的查詢方法是行不通的。你需要在你的查詢中也有user_id('WHERE user_id = 150') – 2013-02-18 12:32:10

回答

1

怎麼樣這個查詢:

SELECT user_id, COUNT(*) as nbTrainings FROM Training_users 
WHERE training_id = 172 OR training_id = 174 
GROUP BY user_id 
HAVING nbTrainings = 2 

它會過濾具有培訓172或174的用戶,那麼它會統計每個用戶返回多少培訓只有經過兩次培訓才能保留一個人。

此,假設用戶不能有多個培訓172和/或174

的這對多自聯接的好處是,你不必加入多個次,每次培訓的ID,如果你想以超過2個訓練ID進行過濾。

GROUP BYHAVING here

編輯

更多信息:經過sqlfiddle測試這似乎工作,如果某些用戶有多個training_id,一個是172或174

工作sqlfiddle

不返回錯誤的值
+0

我想這種解決方案也是如此。讓我們看看它是否足夠。我放棄了這一點,因爲可以有一行用戶1 - > 172和65,然後用戶2 - > 174和42.這個查詢應該輸出用戶1和2。 – iiro 2013-02-18 12:36:28

+0

@iiro:剛剛在sqlfiddle中測試過,這似乎工作。它不會計算除172/174以外的訓練數量,因爲這些行已被過濾掉。 – koopajah 2013-02-18 12:44:16

+0

哦,是的,你是對的:) – iiro 2013-02-18 12:49:35

-3

做這樣的事情

SELECT user_id FROM Training_users WHERE (training_id = 172) AND (training_id = 174) 
+3

這也將返回另一個用戶ids – iiro 2013-02-18 12:29:04

+0

@iiro不要求唯一的用戶ID – Vineet1982 2013-02-18 12:30:14

+1

@ Vineet1982「它必須只返回用戶150」 – Husman 2013-02-18 12:30:42

0

這應該工作:

SELECT a.user_id FROM Training_users a, Training_users b WHERE a.training_id = 172 and a.user_id = b.user_id AND b.training_id = 174; 
0

這應做到:

SELECT 
    a.user_id 
FROM 
    Training_users a 
RIGHT JOIN 
    Training_users b ON a.user_id = b.user_id AND b.training_id = 174 
WHERE 
    a.training_id = 172 
0
select user_id from work where training_id in (172,174) group by user_id having count(*) > 1; 

檢查SQLFiddle Demo