如何选择行及其所有相关行?

时间:2018-04-17 14:47:50

标签: mysql sql

这是我的表结构:

// mytable
+----+---------+
| id | related |
+----+---------+
| 1  | NULL    |
| 2  | 1       |
+----+---------+

现在,我需要选择包含id = 1的行和包含related = 1的所有行。这是我的疑问:

select m1.*
from mytable m1
left join mytable m2 on m1.id = m2.related
where m1.id = 1

但它只返回第一行。怎么了?

5 个答案:

答案 0 :(得分:2)

你可以这样做:

select t.*
from mytable t
where 1 in (id, related);

不需要自我加入。

编辑:

如果您想要性能,请将查询写为:

select t.*
from mytable t
where id = 1
union all
select t.*
from mytable t
where related = 1;

mytable(id)mytable(related)上定义两个索引。

答案 1 :(得分:2)

如果我理解正确你正在寻找这个:

select m1.*
from mytable m1 where m1.id = 1 or m1.related = 1

答案 2 :(得分:1)

您需要使用内连接。

select m1.*
from mytable m1
inner join mytable m2 on m1.id = m2.related
where m1.id = 1

答案 3 :(得分:1)

您可以尝试使用UNION ALL,或者如果您不想要重复使用UNION

select * from mytable m1 where m1.id = 1
UNION
select * from mytable m2 where m2.related = 1

答案 4 :(得分:1)

你能试试这段代码吗?

SELECT * FROM table WHERE (id = 1 AND related IS NULL) OR related = 1;

我创建了一个包含更多项目的表,它会返回您想要的内容。请检查此enter image description here