mysql - 确保不同表中的 2 列逐行相同 MySQL
问题描述
我希望逐行比较两个不同的表,以确保文件名和与文件名关联的计数都匹配。如果其中一个不匹配,我想输出不匹配的两行。
我正在使用 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 列。对于要被视为“相同”的表,必须在两个表中找到文件名和与该文件名关联的计数。如果这没有发生,我想输出无法找到匹配项的行。
解决方案
你想要NOT EXISTS
:
表格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
:
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);
推荐阅读
- matlab - 如何在 Matlab 中将 PPM 图像转换为 JPG?
- r - 使用 RcppArmadillo::sample 增量采样时的奇怪行为
- c# - Entity Framework Core 中的重用记录
- ffmpeg - 帧率 vs r vs 过滤器 fps
- ruby-on-rails - Capybara Select2 帮助 w/Firefox
- xml - For Each with SelectNodes not working
- android - 换行符在通知android studio中不起作用
- javascript - 布尔变量未声明?
- node.js - 如何在 SalesForce 之外访问富文本字段图像?
- selenium - 无法将值解释为数组