Те же столбцы, и объединить их в одном наборе результатов?
Похоже, что UNION ALL и EXCEPT могут использоваться здесь.
SELECT col1, col2, col3, col4
FROM TableA
EXCEPT
SELECT col1, col2, col3, col4
FROM TableB
UNION ALL
SELECT col1, col2, col3, col4
FROM TableB
Тест по дБ <> скрипка здесь
Но у него есть тот недостаток, что он приведет к количеству повторяющихся строк, как показано в Таблице B.
А если бы вы могли использовать версию Sqlite (3.25+), которая наконец поддерживает функции окна? Ссылка . Затем с помощью ROW_NUMBER можно решить проблему с «дубликатами TableA> дубликатов TableB»:
SELECT col1, col2, col3, col4
FROM
(
SELECT col1, col2, col3, col4,
row_number() over (partition by col1, col2, col3, col4 order by (select 0)) as rn
FROM TableA
EXCEPT
SELECT col1, col2, col3, col4,
row_number() over (partition by col1, col2, col3, col4 order by (select 0))
FROM TableB
UNION ALL
SELECT col1, col2, col3, col4, 0
FROM TableB
) q
ORDER BY col1, col2, col3, col4
тест
В старых версиях оконную функцию ROW_NUMBER можно имитировать.
SELECT col1, col2, col3, col4
FROM
(
SELECT a.col1, a.col2, a.col3, a.col4,
(select count(*) from TableA a2
where a2.col1 = a.col1
and a2.col2 = a.col2
and a2.col3 = a.col3
and a2.col4 = a.col4
and a2.rowid >= a.rowid) as rn
FROM TableA a
EXCEPT
SELECT b.col1, b.col2, b.col3, b.col4,
(select count(*) from TableB b2
where b2.col1 = b.col1
and b2.col2 = b.col2
and b2.col3 = b.col3
and b2.col4 = b.col4
and b2.rowid >= b.rowid)
FROM TableB b
UNION ALL
SELECT col1, col2, col3, col4, 0
FROM TableB
) q
ORDER BY col1, col2, col3, col4
Тест по дБ <> скрипка здесь