Более простая альтернатива внутреннему соединению

Можно ли сравнить данные из 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;
Другие вопросы по тегам