我很难推理问题:
鉴于此表:
+------+------------+ | 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/