将用户标识传递给嵌套查询

时间:2012-10-23 19:53:52

标签: php mysql sql nested

我正在尝试从用户数据库中选择未订阅特定邮件列表的所有用户。内部查询查找用户是否是列表的成员,外部查询选择内部结果为零行的所有用户。

SELECT u.userid, u.username, u.mail, u.name, 
    u.lastname, u.starting_year, u.userid AS UIDD 
FROM userdb.users AS u 
WHERE (SELECT COUNT(*) FROM maildb.lists AS l, 
        maildb.list_subscriptions AS s, userdb.users AS u 
    WHERE u.userid = UIDD 
    AND l.listid = '$LIST_ID_TO_LOOKUP' 
    AND s.userid = u.userid 
    AND s.listid = l.listid) = 0 
ORDER BY u.starting_year DESC, u.lastname, u.name;

这很好用,直到我搬到新服务器并更新了许多组件,包括MySQL。

现在我在运行此查询时遇到错误:

  

#1054 - 'where子句'中的未知列'UIDD'

这是一个现在被删除的旧语法的问题吗?我现在正在运行MySQL 5.5.24。

2 个答案:

答案 0 :(得分:1)

像这样,SELECT .. WHERE userid NOT IN(子查询)

SELECT 
 u.userid, 
 u.username, 
 u.mail, 
 u.name, 
 u.lastname,
 u.starting_year, 
 u.userid AS UIDD 
FROM 
 userdb.users AS u 
WHERE 
 u.userid NOT IN (
    SELECT 
      u.userid 
    FROM 
      maildb.lists AS l, 
      maildb.list_subscriptions AS s, 
      userdb.users AS u 
    WHERE 
      u.userid = u.userid 
      AND l.listid = '$LIST_ID_TO_LOOKUP' 
      AND s.userid = u.userid 
      AND s.listid = l.listid
    ) 
ORDER BY 
 u.starting_year DESC, u.lastname, u.name;

答案 1 :(得分:0)

你做不到。

你可以做的是重写子查询以选择列&按u.userid分组,并在sub_select.userid = u.userid

上加入此子选项