使用 EXCEPT 时如何获取特定的不匹配列

How to get specific mismatched column when using EXCEPT

我正在使用 EXCEPT / MINUS 来比较两个表之间的 rows/columns 是否匹配。

select col1, col2 from table1
minus
select col1, col2 from table2

对于给定的行,例如col2 不匹配,那么我只想输出 col2 忽略匹配的 col1 值或显示空值,因为 col1 没有不匹配。有没有办法单独使用 SQL 来做到这一点?

Table1

| col1 | col2 |
|  A   |  B   |
|  X   |  Y   |
|  M   |  N   |

Table 2

| col1 | col2 |
|  A   |  Z   |
|  X   |  Y   |
|  1   |  N   |

应用上述 sql 产生

| col1 | col2 |
|  A   |  B   |
|  M   |  N   |

但我可能需要的只是不匹配的值,如下所示。

| col1 | col2 |
|      |  B   |
|  M   |      |

你可以试试这个

SELECT CASE 
         WHEN T2.COL1 IS NULL OR T1.col1 <> T2.col1 THEN T1.col1 
       END COL1, 
       CASE 
         WHEN T2.COL2 IS NULL OR T1.col2 <> T2.col2 THEN T1.col2 
       END COL2 
FROM   table1 T1 
       LEFT JOIN table2 T2 
         ON (T1.col1 = T2.col1 
             OR T1.col2 = T2.col2)
            AND (T1.col1 <> T2.col1 
                  OR T1.col2 <> T2.col2); 

希望这能解决您的问题。