Как использовать возвращаемое значение MYSQL "AS" внутри предложения WHERE? - PullRequest
1 голос
/ 19 июля 2010

У меня есть запрос, подобный приведенному ниже ...

SELECT 
   contents.id, contents.title, contents.createdBy,
 (SELECT userGroup FROM suser_profile WHERE userId = 
         (SELECT users.id 
          FROM 
            users 
          WHERE 
            login = contents.createdBy)
    ) as userGroupID
FROM 
   contents 
WHERE
   contents.id > 0   
   AND contents.contentType = 'News' 
   **AND userGroupID = 3**
LIMIT 0, 10

Когда я пытаюсь назначить userGroupID внутри предложения WHERE, SQL вызывает ошибку, сообщая об ошибке SQL (1054): неизвестностолбец "userGroupID" в "где предложение"

тем временем, если я сделаю небольшие изменения, как показано ниже, *

SELECT 
   contents.id, contents.title, contents.createdBy
FROM 
   smart_cms_contents 
WHERE
   contents.id > 0   
   AND contents.contentType = 'News' 
   **AND (SELECT userGroup FROM user_profile WHERE userId = 
         (SELECT users.id 
          FROM 
            users 
          WHERE 
            users.login = contents.createdBy)
    ) = 3**
LIMIT 0, 10

, тогда запрос работает нормально.

Я должениспользуйте множественную userGroupID проверку, чтобы 2-й стиль сделал запрос большим, мне нужно иметь стиль, подобный первому, любая помощь приветствуется.

* ПРИМЕЧАНИЕ. Имена таблиц не являются оригинальнымичто я использую в своем проекте.Вы можете игнорировать его, если в названии таблицы есть ошибки.Моя главная задача заключается в использовании значений, назначенных переменной с помощью AS внутри предложения WHERE.

Игнорировать ЗВЕЗДЫ в запросе *

Ответы [ 3 ]

2 голосов
/ 19 июля 2010

используйте HAVING.пример:

WHERE
    contents.id > 0   
  AND
    contents.contentType = 'News'
HAVING
    userGroupID = 3
LIMIT 0, 10
1 голос
/ 19 июля 2010

Совсем не ответ на вопрос, который вы задали, но ...

SELECT DISTINCT c.id, c.title, c.createdBy, s.userGroup AS userGroupID
FROM contents AS c
INNER JOIN users AS u
  ON c.createdBy = u.login
INNER JOIN suser_profile AS s
  ON s.userId = u.id
WHERE c.id > 0
  AND c.contentType = 'News'
  AND s.userGroup = 3
1 голос
/ 19 июля 2010

Если я правильно понимаю ваш начальный запрос, то я считаю, что вы хотите сделать соединение:

SELECT DISTINCT 
   contents.id, contents.title, contents.createdBy
FROM
   contents INNER JOIN users
      ON contents.createdBy = users.login
   INNER JOIN user_profile
      ON user_profile.userId = users.id
WHERE
   contents.id > 0   
   AND contents.contentType = 'News' 
   AND user_profile.userGroupID = 3
LIMIT 0, 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...