mysql - 在mysql中选择不同的元组

标签 mysql sql

我很难推理问题:

鉴于此表:

+------+------------+
| id   | sibling_id |
+------+------------+
|    1 |       NULL |
|    2 |          3 |
|    3 |          2 |
|    4 |          5 |
|    5 |          4 |
+------+------------+

如果我选择 ids (1,2,3,5),我只想获取 (1,2,4) code>,因为 3 指向 2,而 2 指向 3,所以我只想要两者之一。

预期输出:

+------+------------+
| id   | sibling_id |
+------+------------+
|    1 |       NULL |
|    2 |          3 |
|    4 |          5 |
+------+------------+

如何使用 mysql (5.7) 做到这一点?

解决方案:

从测试中选择不同的最小(id,coalesce(sibling,id)),其中id位于(1,2,3,5);

谢谢大家!

最佳答案

您必须确保元组始终相同(意味着例如始终是 (2,3) 而不是 (3,2))。为此,您可以始终将较小的值放在元组的前面,将较大的值放在元组的末尾。使用 LEAST()GREATEST() 来实现。

SELECT 
DISTINCT
LEAST(id, sibling_id), GREATEST(id, sibling_id)
FROM table
WHERE id IN (1,2,3,5);

关于mysql - 在mysql中选择不同的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45375718/

相关文章:

mysql - 在 plesk 中,我如何授予用户使用 php 创建数据库的权限,但仅限于他的域

mysql - Laravel 中的链接多对一关系

mysql - 第一个 LEFT JOIN 是否适用于多个 JOIN?

php - 1分钟后出现500服务器错误

mysql - 在另一个 jsp 文件中使用 ResultSet 值

mysql - 将 Laravel 与 MS Access 作为第二个数据库连接

sql - PostgreSQL - 将底部的 N 个结果切片并将它们移动到顶部

sql - FROM 中的子查询必须有一个别名

sql - 内连接中的子查询

MySQL - 如何使用列约束声明主键?