我在表中有一组 id(列 id),比方说从 1 到 10,我想要耦合。
我在表中现有一组完全随机生成的对(列 id1、id2)。
我想在单个 SQL 语句上找到剩余的对的集合。
排列非常容易,我的问题是不重复的组合。这意味着在考虑 (id1,id2) == (id2,id1) 时,或者换句话说,我不知道如何找到一个不包含顺序已更改的现有对的集合。
有什么想法吗?
例如如果我有表 myids
|id|
|1 |
|2 |
|3 |
|4 |
|5 |
|6 |
|7 |
|8 |
|9 |
|10|
并列出我的情侣
|id1|id2|
|1 |2 |
|9 |1 |
|7 |8 |
我的陈述应该得到 10*9 - 6 = 84 个不同的对,即 10 个元素的所有可能排列,不包括 (id1=1,id2=2),(id1=2,id2=1),( id1=9,id2=1),(id1=1,id2=9),(id1=7,id2=8),(id1=8,id2=7)。
最佳答案
SELECT
m1.id AS id1
, m2.id AS id2
FROM myids AS m1
JOIN myids AS m2
ON m1.id <> m2.id
WHERE NOT EXISTS
( SELECT *
FROM mycouples AS c
WHERE (c.id1, c.id2) = (m1.id, m2.id)
)
AND NOT EXISTS
( SELECT *
FROM mycouples AS c
WHERE (c.id2, c.id1) = (m1.id, m2.id)
)
关于mysql - 在一条 MySQL 语句中选择不存在的 id 对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9857534/