单个查询中的多个select语句

问题描述 投票:0回答:1

目前,我正在尝试从朋友和/或当前用户所关注的人员中选择帖子列表。但是,当我添加following表的第二个语句时,我遇到了一个问题。

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
mysql adodb
1个回答
2
投票

只需使用两个明确的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;

这可能会修复语法错误,甚至可以为您提供所期望的输出,但我也觉得我们可以稍微清理一下查询。样本数据将在很长一段时间内实现。

© www.soinside.com 2019 - 2024. All rights reserved.