2011-09-26 25 views
1

基本上我有以下查詢:比賽各變量在MySQL(通過)

SELECT DISTINCT users.ID, users.name 
FROM users 
INNER JOIN usersSkills ON users.ID = usersSkills.userID 
INNER JOIN usersLanguages ON users.ID = usersLanguages.userID 
WHERE activated = "1" 
AND type = "GRADUATE" 
AND usersSkills.skillID IN(2, 21) 
AND usersLanguages.languageID IN(2, 22) 

我需要的skillID和languageID匹配的那一刻每個在IN()函數傳遞每個參數如果找到任何參數,那麼它將提供結果。

所以基本上我只希望看到的結果,如果2個和21個技能ID是在技能表和語言同樣的想法找到...

回答

2

使用GROUP BY(這也將消除需要SELECT DISTINCT)來獲取聚合計數和HAVING子句,以確保返回的不同元素的計數與您正在搜索的元素的數量相匹配。

SELECT users.ID, users.name 
FROM users 
INNER JOIN usersSkills ON users.ID = usersSkills.userID 
INNER JOIN usersLanguages ON users.ID = usersLanguages.userID 
WHERE activated = "1" 
AND type = "GRADUATE" 
AND usersSkills.skillID IN(2, 21) 
AND usersLanguages.languageID IN(2, 22) 
GROUP BY users.ID, users.name 
HAVING COUNT(DISTINCT usersSkills.skillID) = 2 
    AND COUNT(DISTINCT usersLanguages.languageID) = 2 
+0

謝謝這是相當接近,但我仍然得到以下錯誤:在「having子句 –

+0

@AndréFigueira檢查錯別字未知列「usersLanguages.languageID」。 –

+0

我有,這是正確的,你張貼的人失蹤了,但我解決了這個問題,它仍然無法正常工作 –