Mysql 是否不同

标签 mysql

我有一个如下所示的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 <> '') or id IN (SELECT distinct(child) FROM mytable where child <> '');

但也许可以用更优雅的方式来完成,尤其是考虑到速度。

最佳答案

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/

相关文章:

mysql - 从自动启动中删除 mysql

php - 无法创建 MySQL 存储过程

mysql - 应该索引多少个字段以及我应该如何创建它们?

mysql - 每个用户的唯一订单 ID

php - MySQL 插入语句队列

mysql - 选择并计算一天开始和结束时的条目数

java - 在 osx 上使用 jdbc 将 java 连接到 mysql

PHP - 在 while 循环中分配值并在循环外单独访问它们

mysql - 计算执行查询时的时间差

mysql - 如何在存储过程中循环结果?