Убедитесь, что 2 столбца в разных таблицах идентичны строка за строкой MySQL - PullRequest
0 голосов
/ 21 февраля 2019

Я хочу сравнить две разные таблицы строка за строкой, чтобы убедиться, что и имя файла, и количество, связанные с именем файла, совпадают.Если ни один из них не совпадает, я хочу вывести две строки, которые не совпадают.

Я использую 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 Ответ

0 голосов
/ 21 февраля 2019

Вы хотите NOT EXISTS:

Table1:

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

Table2:

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); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...