Несколько внутренних объединений MYSQL - PullRequest
2 голосов
/ 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) 
GROUP BY usersSkills.userID HAVING COUNT(*) = 1 

AND usersLanguages.languageID IN(2) 
GROUP BY usersLanguages.userID HAVING COUNT(*) = 1 

Но я продолжаю получать эту ошибку:

В вашем синтаксисе SQL есть ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с 'GROUP BY usersLanguages.userID HAVING COUNT (*) = 1' в строке 14

Если я удалю одно из внутренних объединений и группуbys это работает, поэтому не уверен, что это такое, я могу использовать две группы bys?

Ответы [ 2 ]

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

У вас есть две группы в предложениях; это неверный SQL. Сделайте свою первую группу, затем запятую, а затем вторую группу. Ваши предложения «Наличие» должны появляться после использования «И» и «И» для объединения их в логическое утверждение

GROUP BY usersSkills.userID, usersLanguages.userID
HAVING COUNT(*) = 1 
AND usersLanguages.languageID IN(2) 

, который отвечает на ваш вопрос о синтаксической ошибке ... (не пытаясь здесь говорить), но структура запроса показывает, что вы на самом деле не знаете, что вы хотите сделать в форме запроса ... Я бы сильно Предлагаем вам получить книгу по SQL или пройти учебник по SQL, чтобы вы понимали, что на самом деле делают операторы, которые вы пытаетесь написать ..

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

Тр это:

SELECT DISTINCT users.ID, users.name, COUNT(*)
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 = 2 
      AND usersLanguages.languageID = 2 
GROUP BY usersSkills.userID,
         usersLanguages.userID 
HAVING COUNT(*) = 1 

Удалил несколько ошибочных GROUP BY и объединил запрос.
Также изменил IN(x) на = x

...