使用 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);
希望这能解决您的问题。
我正在使用 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);
希望这能解决您的问题。