我有 2 个表:tab_Def 和 tab_Prod,具有相同的列和相同的数据。 表 tab_Def 是包含模型数据的默认表。表 tab_Prod 是一个生产表,可能会对其进行一些更新,但需要在当天结束时与表 tab_Def 匹配。这些表中一列中的某些数据是重复的,但与另一列组合时会有所不同,如下所示:
tab_Def:
col_1 | col_2 |
---|---|
101 | ABC |
102 | ABC |
101 | XYZ |
tab_Prod:(发布更新)
col_1 | col_2 |
---|---|
-101 | ABC |
102 | ABC |
-101 | XYZ |
我有以下查询,但它会将每一行与所有行进行比较,而不是仅显示不匹配的数据行,而是显示数字不匹配的所有行。
select a.col_1, a.col_2, b.col_1
from tab_Def a, tab_Prod b
where a.col_2=b.col_2
and a.col_1<>b.col_1
group by a.col_2, a.col_1, b.col_1
order by a.col_1, b.col_1, a.col_2;
我需要比较两个表并在结果中获取不匹配的行(col_1 -101),如下所示:
预期结果:
col_1 | col_2 | col_1 |
---|---|---|
101 | ABC | -101 |
101 | XYZ | -101 |
我应该如何编辑我的查询?
根据您的数据示例,这看起来很简单,
select td.col_1,
td.col_2,
tp.col_1
from tab_Def td
inner join tab_Prod tp on td.col_2=tp.col_2
where tp.col_1 = concat('-',td.col_1);
结果,
col_1 col_2 col_1
101 ABC -101
101 XYZ -101