Более простая альтернатива внутреннему соединению
Можно ли сравнить данные из 2-х таблиц в одной таблице?
Таблица 1
UNION складывает запросы сверху, поэтому в итоге получится 4 строки (1,2,1,3). И INNER JOIN может быть не лучшим решением, так как мы не знаем, какая таблица длиннее?
(SELECT t1.id, t1.val, new.sum_val, t1.val = new.sum_val as Match
FROM t1
INNER JOIN
(SELECT t2.id, SUM(t2.val) as sum_val
FROM t2
WHERE t2.date = TODAY()
GROUP BY t2.ID) new on t1.ID = t2.ID
WHERE t1.date = TODAY())
1 ответ
Вы можете использовать полное соединение. Это примерно левое и правое соединение в одном. Он сохраняет все строки из обеих таблиц. Если есть совпадающая партнерская строка, партнерские строки объединяются, если нет, значения для партнерской строки остаются.
NULL
.
SELECT coalesce(t1.id, t2.id) AS id,
t1.val AS val1,
t2.val AS val2,
CASE
WHEN t1.val = t2.val
OR t1.val IS NULL
AND t2.val IS NULL THEN
1
ELSE
0
END AS match
FROM "table 1" AS t1
FULL JOIN "table 2" as t2
ON t2.id = t1.id;