mysql - 在一条 MySQL 语句中选择不存在的 id 对

标签 mysql select

我在表中有一组 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/

相关文章:

mysql - 子查询没有输出正确的结果?

mysql - 如何将 tMysqlRow 中的选择查询结果记录到 Talend 中的 tLogRow?

php - 使用正确的ID将评论插入数据库以匹配和广告(php,mysql)

mysql - Bullet gem 不从 Rails 控制台记录

MySQL根据每日时间戳范围进行选择

c# - 选择异步函数的更好方法?

mysql - 如何将 latin1_swedish_ci 转换为 utf8-general-ci

mysql - 查询返回所有行

python - 为什么在我的 python sqlite SELECT 结果中得到额外的逗号?

c# - 使用 LINQ,如何有条件地选择某些项目但没有条件选择全部?