我有一个如下所示的mytable
:
id child
1
2 1
3 1
4
5
6 5
7
8
等等。 我只想选择所有 child 和所有 parent 。
对于这个例子,它应该是:
id child
1
2 1
3 1
5
6 5
我创建了这样的选择:
SELECT * FROM mytable where (
child
<> '') orid
IN (SELECT distinct(child
) FROM mytable wherechild
<> '');
但也许可以用更优雅的方式来完成,尤其是考虑到速度。
最佳答案
SELECT mytable.*
FROM mytable
JOIN mytable AS t2
WHERE mytable.id = t2.child
AND t2.child <> ''
UNION
SELECT *
FROM mytable
WHERE child <> ''
GROUP BY id, child
如果您在 id 上有一个索引,在 child 上有另一个索引,这将为双方使用索引。 GROUP BY 会对性能产生影响,但对于防止 UNION 第一部分的重复记录是必要的。
关于Mysql 是否不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28700933/