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

4ngedf3f  于 2021-06-25  发布在  Mysql
关注(0)|答案(5)|浏览(263)

这是我的表格结构:

// 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

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

xxb16uws

xxb16uws1#

你能试试这个密码吗 SELECT * FROM table WHERE (id = 1 AND related IS NULL) OR related = 1; 我创建了一个包含更多项的表,它会返回您想要的内容。看看这个

myzjeezk

myzjeezk2#

你可以做:

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) .

yzuktlbb

yzuktlbb3#

你可以尝试联合所有或如果你不想重复使用联合

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

zbdgwd5y4#

你需要使用内部连接。

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

7qhs6swi5#

如果我理解正确,您正在寻找:

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

相关问题