单个查询中的多个 select 语句
Multiple in select statements in single query
目前,我正在尝试 select 当前用户关注的朋友 and/or 的帖子列表。但是,当我在 following
table.
的第二个语句中添加时,我 运行 遇到了问题
SELECT * FROM login, threads WHERE login.id=threads.poster_id AND deleted=0 AND login.id
IN ((SELECT CASE WHEN second_id=? THEN first_id ELSE second_id END FROM friends WHERE first_id=? OR second_id=?)
AND (SELECT CASE WHEN follower=? THEN following ELSE follower END FROM following WHERE follower=?))
ORDER BY threads.posted DESC LIMIT 20
只需对两个子查询使用两个显式 IN
条件:
SELECT *
FROM login
INNER JOIN threads
ON login.id = threads.poster_id
WHERE
deleted = 0 AND
(login.id IN (SELECT CASE WHEN second_id=? THEN first_id ELSE second_id END
FROM friends WHERE first_id=? OR second_id=?) AND
login_id IN (SELECT CASE WHEN follower=? THEN following ELSE follower END
FROM following WHERE follower=?))
ORDER BY
threads.posted
DESC LIMIT 20;
这可能会修复语法错误,甚至会为您提供您期望的输出,但我也觉得我们可能能够进一步清理查询。样本数据将大大有助于实现这一目标。
目前,我正在尝试 select 当前用户关注的朋友 and/or 的帖子列表。但是,当我在 following
table.
SELECT * FROM login, threads WHERE login.id=threads.poster_id AND deleted=0 AND login.id
IN ((SELECT CASE WHEN second_id=? THEN first_id ELSE second_id END FROM friends WHERE first_id=? OR second_id=?)
AND (SELECT CASE WHEN follower=? THEN following ELSE follower END FROM following WHERE follower=?))
ORDER BY threads.posted DESC LIMIT 20
只需对两个子查询使用两个显式 IN
条件:
SELECT *
FROM login
INNER JOIN threads
ON login.id = threads.poster_id
WHERE
deleted = 0 AND
(login.id IN (SELECT CASE WHEN second_id=? THEN first_id ELSE second_id END
FROM friends WHERE first_id=? OR second_id=?) AND
login_id IN (SELECT CASE WHEN follower=? THEN following ELSE follower END
FROM following WHERE follower=?))
ORDER BY
threads.posted
DESC LIMIT 20;
这可能会修复语法错误,甚至会为您提供您期望的输出,但我也觉得我们可能能够进一步清理查询。样本数据将大大有助于实现这一目标。