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