Соответствует каждой переменной, переданной в MYSQL IN () - PullRequest
1 голос
/ 26 сентября 2011

По сути, у меня есть следующий запрос:

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 и такая же идея для языков ...

1 Ответ

2 голосов
/ 26 сентября 2011

Используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...