1

我有一个像下面这样的查询...

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

当我尝试在 WHERE 子句中分配userGroupID时,SQL 会触发一个错误,提示 SQL 错误(1054):“where 子句”中的未知列“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检查,这样,第二种风格会使查询变大,我必须有第一种风格,任何帮助表示赞赏。

*注意:表名不是我在项目中使用的原始名称。如果表名有错误,您可以忽略它。我主要关心的是在WHERE 子句中使用AS分配给变量的值。

忽略查询中的星号*

4

3 回答 3

2

使用HAVING. 例子:

WHERE
    contents.id > 0   
  AND
    contents.contentType = 'News'
HAVING
    userGroupID = 3
LIMIT 0, 10
于 2010-07-19T07:39:46.983 回答
1

如果我正确理解了您的初始查询,那么我相信您想要做的是加入:

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
于 2010-07-19T07:40:11.800 回答
1

完全不是你问的问题的答案,但是......

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
于 2010-07-19T07:40:47.880 回答