【问题标题】:How can I join together two queries on the same table?如何将同一张表上的两个查询连接在一起?
【发布时间】:2013-03-08 21:47:59
【问题描述】:

我有一个名为 related_post 的 MySQL 表,如下所示:

+----+--------+--------+
| id | post_1 | post_2 |
+----+--------+--------+
|  1 |     25 |     26 |
|  2 |     25 |     27 |
|  3 |     25 |     28 |
|  4 |     26 |     27 |
|  5 |     26 |     28 |
|  6 |     27 |     28 |
|  … |     …  |     …  |
+----+--------+--------+

我需要检索给定帖子 ID 的所有相关帖子。

如果我提供“27”,我希望它返回一个包含“25”、“26”和“28”作为值的列。

现在,我需要将其拆分为 2 个查询:

SELECT post_1 FROM related_post where post_2 = 27;
SELECT post_2 FROM related_post where post_1 = 27;

我想知道是否可以只执行一个查询来完成相同的结果。

【问题讨论】:

    标签: mysql select join


    【解决方案1】:

    您可以使用 CASE 语句在一个查询中执行此操作

    SELECT CASE WHEN post_2 = 27 THEN post_1 ELSE post_2 END as post
    FROM related_post 
    WHERE post_2 = 27 OR post_1 = 27;
    

    【讨论】:

    • 这比执行两个SELECT 查询和UNIONing 更快,对吗?
    • @Redandwhite 是的,会的。
    【解决方案2】:

    试试UNION:

    SELECT post_1 AS post FROM related_post where post_2 = 27
    UNION
    SELECT post_2 FROM related_post where post_1 = 27
    

    UNION 也会删除重复项;如果您不想要这个,请使用UNION ALL

    【讨论】:

    • 谢谢!这最终并没有成为公认的答案(我正在寻找案例陈述),但 +1 是一个非常可行的答案。谢谢
    猜你喜欢
    • 2014-08-17
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 2015-09-10
    • 2019-04-04
    • 2017-06-13
    • 2020-11-05
    • 2012-11-05
    相关资源
    最近更新 更多