Как объединить два частично перекрывающихся списка в MySQL? - PullRequest
1 голос
/ 13 мая 2009

ОК, поэтому у меня есть две таблицы (на самом деле представления), которые имеют одинаковую структуру. У каждого есть столбец с датой и столбец с числовым значением.

Даты в обеих таблицах будут почти непрерывными и охватывают один и тот же период. Следовательно, данные будут в основном одинаковыми, но дата в одной таблице может не отображаться в другой.

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

Есть какие-нибудь подходы?

<Ч />

PS Это не тот же вопрос: Как объединить две таблицы MySQL?

Ответы [ 2 ]

2 голосов
/ 13 мая 2009

Решение VladiatOr можно сократить, если в первой части выбрать записи, присутствующие в обеих и только в первой таблице, а затем добавить только те, которые присутствуют во второй таблице.

SELECT t1.td, t1.val as val1, t2.val as val2
  FROM table1 as t1
  LEFT JOIN table2 as t2
  ON t1.td = t2.td
UNION
SELECT t2.td, t1.val as val1, t2.val as val2
  FROM table2 as t2
  LEFT JOIN table1 as t1
  ON t2.td = t1.td
WHERE t1.td IS NULL

См. Также комментарий Тобиаса Рименшнайдера в справочнике MySQL по синтаксису JOIN .

1 голос
/ 13 мая 2009

Этот запрос представляет собой объединение из 3 запросов: Первый объединяет записи, которые являются общими в обеих таблицах. Второй добавляет те, которые существуют только в таблице1. Третий добавляет записи, которые есть только в таблице 2.

SELECT t1.td, t1.val as val1, t2.val as val2
FROM table1 as t1, table2 as t2
WHERE t1.dt = t2.dt
UNION
SELECT t1.td, t1.val as val1, null as val2
FROM table1 as t1
LEFT JOIN table2 as t2
ON t1.td = t2.td
WHERE t2.td IS NULL
UNION
SELECT t2.td, null as val1, t2.val as val2
FROM table2 as t2
LEFT JOIN table1 as t1
ON t2.td = t1.td
WHERE t1.td IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...