MySQL 查找两列之间缺失的组合

J D*_*Doe 0 mysql

我在 MySQL 中运行,我有一个表输出作为目的地(a,b,c),如下所示

columnstart  columnend
a             b
a             c
b             a
b             b
b             c
c             a
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试获取未在下面的输出中列出的目的地

columnstart   columnend
a             a
c             b
c             c
Run Code Online (Sandbox Code Playgroud)

有什么方法可以实现这一目标吗?提前致谢。

Mad*_*iya 6

以下是通用方法

  • 我们从两个单独的 Select 查询中获取唯一值,columnstart并在它们之间执行一个操作,以获取Derived Table中的所有可能组合(笛卡尔积)。columnendCROSS JOIN
  • 现在,只有LEFT JOIN派生表结果集与主表,使用columnstartcolumnend
  • 通过使用最右边的表列(您的主表列)上的条件,查找主表中缺少的组合。is null

尝试以下操作(SQL Fiddle DEMO):

SELECT dt.columnstart, 
       dt.columnend 
FROM 
(
  SELECT t1.columnstart, t2.columnend FROM 
    (SELECT DISTINCT columnstart FROM your_table) AS t1 
    CROSS JOIN 
    (SELECT DISTINCT columnend FROM your_table) AS t2 
) AS dt 
LEFT JOIN your_table AS t3 
  ON t3.columnstart = dt.columnstart AND 
     t3.columnend = dt.columnend 
WHERE t3.columnstart IS NULL AND 
      t3.columnend IS NULL 
Run Code Online (Sandbox Code Playgroud)

  • +10 是的,这与我使用的方法相同。所有可能组合的笛卡尔积,使用反连接消除确实存在的组合,留下不存在的组合。 (2认同)