SQL-返回行之间的差异(在两个不同的表中),但仅当两个表中都存在行ID时才返回
我有两个表,其中包含两个潜在的差异,我正在尝试获取这些差异-仅存在于其中一个表中的行,以及存在于这两个表中的行(共享一个公共ID),但其中一个列的值不同(两个表中的列完全相同) 我可以返回MyTable1中不在MyTable2中的ID:SQL-返回行之间的差异(在两个不同的表中),但仅当两个表中都存在行ID时才返回,sql,sqlite,Sql,Sqlite,我有两个表,其中包含两个潜在的差异,我正在尝试获取这些差异-仅存在于其中一个表中的行,以及存在于这两个表中的行(共享一个公共ID),但其中一个列的值不同(两个表中的列完全相同) 我可以返回MyTable1中不在MyTable2中的ID: SELECT MyTable1.* FROM MyTable1 WHERE MyTable1.ID NOT IN (SELECT MyTable2.ID FROM MyTable2) 返回我想要的内容: ID FIRST_NAME DOB
SELECT MyTable1.*
FROM MyTable1
WHERE MyTable1.ID NOT IN (SELECT MyTable2.ID FROM MyTable2)
返回我想要的内容:
ID FIRST_NAME DOB
"4" "Jebroni" "04-02-18"
对于第二部分,我想比较共享公共ID的行的每个列的值
SELECT 'TABLE1' AS SRC, MyTable1.*
FROM (
SELECT * FROM MyTable1
EXCEPT
SELECT * FROM MyTable2
) AS MyTable1
UNION ALL
SELECT 'TABLE2' AS SRC, MyTable2.*
FROM (
SELECT * FROM MyTable2
EXCEPT
SELECT * FROM MyTable1
) AS MyTable2
这将返回比我所追求的更多的信息—存在于一个表中而不存在于另一个表中的行:
SRC ID FIRST_NAME DOB
"TABLE1" "3" "Larry" "03-02-18"
"TABLE1" "4" "Jebroni" "04-02-18"
"TABLE2" "3" "Barry" "03-02-18"
我应该如何调整我的上一个查询,以使结果为:
SRC ID FIRST_NAME DOB
"TABLE1" "3" "Larry" "03-02-18"
"TABLE2" "3" "Barry" "03-02-18"
即,根据两个表中存在的ID限制返回的内容?将第一组行限制为另一个表中具有匹配ID的行:
SELECT 'TABLE1' AS SRC, *
FROM (
SELECT * FROM MyTable1 WHERE ID IN (SELECT ID FROM MyTable2)
EXCEPT -------------------------------------
SELECT * FROM MyTable2
)
UNION ALL
SELECT 'TABLE2' AS SRC, *
FROM (
SELECT * FROM MyTable2 WHERE ID IN (SELECT ID FROM MyTable1)
EXCEPT -------------------------------------
SELECT * FROM MyTable1
);
我只想使用
加入
:
select *
from MyTable1 t1 join
MyTable2 t2
on t1.id = t2.id
where t1.firstname <> t2.firstname or t1.dob <> t2.dob;
这会将结果限制为两个表中的ID,您不必列出其余的列。我知道是这样的。我试过(而不是在…“MyTable1.ID”中输入ID)。将在7分钟内接受答案-谢谢!
join
部分工作得很好,作为python脚本的一部分,我必须看看它是如何执行的。我能问一下为什么你不认为set-based会做我想做的事吗?@rong。这在select*
中变得很棘手,但使用where
显然表明可以使用基于集合的操作。
select *
from MyTable1 t1 join
MyTable2 t2
on t1.id = t2.id
where t1.firstname <> t2.firstname or t1.dob <> t2.dob;
where id in (select id from mytable1 t1
intersect
select id from mytable2 t2
)