Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-返回行之间的差异(在两个不同的表中),但仅当两个表中都存在行ID时才返回_Sql_Sqlite - Fatal编程技术网

SQL-返回行之间的差异(在两个不同的表中),但仅当两个表中都存在行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

我有两个表,其中包含两个潜在的差异,我正在尝试获取这些差异-仅存在于其中一个表中的行,以及存在于这两个表中的行(共享一个公共ID),但其中一个列的值不同(两个表中的列完全相同)

我可以返回MyTable1中不在MyTable2中的ID:

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
            )