2010-07-19 137 views
1

我有一个查询像下面...如何在WHERE子句中使用MYSQL的“AS”返回值?

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检查,以便第二种风格会使查询大,我必须有一个样式像第一个,任何帮助赞赏。

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

忽略STARS查询*

回答

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 
+0

感谢您使用不同的解决方案。工作正常。 – BlueBird 2010-07-19 07:51:18

2

使用HAVING。例如:

WHERE 
    contents.id > 0 
    AND 
    contents.contentType = 'News' 
HAVING 
    userGroupID = 3 
LIMIT 0, 10 
+0

工作正常。谢谢。 – BlueBird 2010-07-19 07:52:26

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 
+0

好的。有效。 – BlueBird 2010-07-19 07:55:23