1

我有一个名为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;

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

4

2 回答 2

3

尝试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

于 2013-03-08T21:49:13.663 回答
3

您可以使用 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;
于 2013-03-08T21:52:03.327 回答