MySQL发现两列之间缺少组合

时间:2018-10-09 19:48:22

标签: mysql

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

columnstart  columnend
a             b
a             c
b             a
b             b
b             c
c             a

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

columnstart   columnend
a             a
c             b
c             c

有什么方法可以做到这一点?提前致谢。

1 个答案:

答案 0 :(得分:4)

以下是通用方法

  • 我们在两个单独的Select查询中从columnstartcolumnend中获得唯一值,并在它们之间进行CROSS JOIN,以在{{中获得所有可能的组合(笛卡尔积) 3}}。
  • 现在,使用LEFT JOINcolumnstart,仅将columnend派生表结果集与主表一起使用。
  • 通过在最右边的表列(您的主表列)上使用is null条件,查找主表中缺少的组合

尝试以下操作( Derived Table ):

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