Mysql 确保不同表中的两列逐行相同

Mysql 确保不同表中的两列逐行相同,mysql,sql,Mysql,Sql,我希望逐行比较两个不同的表,以确保文件名和与文件名关联的计数都匹配。如果其中一行不匹配,我想输出不匹配的两行 我正在使用MySQL作为操作的数据库 比如说 Expected Actual FileName Count FileName Count name1.txt 4 name1.txt 4 name2.txt 7 name2.txt

我希望逐行比较两个不同的表,以确保文件名和与文件名关联的计数都匹配。如果其中一行不匹配,我想输出不匹配的两行

我正在使用MySQL作为操作的数据库

比如说

Expected                      Actual
FileName    Count             FileName    Count
name1.txt    4                name1.txt    4
name2.txt    7                name2.txt    7
name3.txt    4                name4.txt    4  (invalid filename)
name5.txt    4                name5.txt    5  (invalid count)

Output:
The fOllowing rows did not match:
Expected:                     Actual:
name3.txt    4                name4.txt    4 (because of filename)
name5.txt    4                name5.txt    5 (because counts are diff)
这是为了验证脚本。有两个表,一个用于预期结果,另一个用于实际结果。sql将比较每个表中的行,以确保它们是相同的。每个表中有4列。对于被视为相同的表,必须在两个表中找到文件名和与该文件名关联的计数。如果没有,我希望输出无法找到匹配项的行。

您希望的行不存在:

表1:

SELECT t1.* 
FROM table1 t1
WHERE NOT EXISTS (SELECT 1 FROM table2 t2 WHERE t2.filename = t1.filename AND t1.count = t2.count);
表2:

SELECT t2.* 
FROM table2 t2
WHERE NOT EXISTS (SELECT 1 FROM table1 t1 WHERE t2.filename = t1.filename AND t1.count = t2.count);
如果要将它们整理为一个结果集,请使用union all:


您已经尝试过什么?将您正在比较的两个表的filename和count连接起来,并使用一个并号来获得排除的行;选择文件名,从表1 t1中计数,其中t1.filename或t1.count不在选择文件名中,从表2 t2中计数也尝试使用数据库;从表1 t1、表2 t2中选择t1.Filename、t1.count,其中t1.Filename!=t2.Filename或t1.count!=t2.countIt似乎在表1中捕捉到的项目明显多于表2。理论上,表1中的每一行都应该有一个表2partner@StevenTuer. . . 编辑问题添加更多数据并解释你的目标。我添加了更多details@StevenTuer. . . 这就是查询所做的。我错过了第条。
SELECT t1.filename, t1.count, 'table1' as table_name
FROM table1 t1
WHERE NOT EXISTS (SELECT 1 FROM table2 t2 WHERE t2.filename = t1.filename AND t1.count = t2.count)
UNION ALL
SELECT t2.filename, t2.count, 'table2'
FROM table2 t2
WHERE NOT EXISTS (SELECT 1 FROM table1 t1 WHERE t2.filename = t1.filename AND t1.count = t2.count);