MySQL: объединение двух разных таблиц без JOIN или UNION - PullRequest
3 голосов
/ 04 ноября 2011

Мне нужно объединить две таблицы:

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

Anпример:

table1
date       | colA | colB | colC
2011-02-02 | 1.09 | 1.03 | 1.04

table2
date       | col1 | col2 | col3 | col4
2011-02-03 | 1.03 | 1.02 | 1.07 | 1.03

результат запроса должен выглядеть следующим образом:

tableResult
date       | colA | colB | colC | col1 | col2 | col3 | col4
2011-02-02 | 1.09 | 1.03 | 1.04 | null | null | null | null
2011-02-03 | null | null | null | 1.03 | 1.02 | 1.07 | 1.03

Это не будет работать:

  • INNER JOIN, потому что это будетвозвращает только пересечение между table1 и table2,
  • OUTER JOIN возвращает пересечение + значения только из левой таблицы (или правой таблицы, если используется правое соединение)
  • UNION, посколькуколичество столбцов может отличаться.

Есть идеи?

Кристоф

Ответы [ 2 ]

3 голосов
/ 04 ноября 2011

Вы можете создать временную таблицу с объединением только столбца даты, а затем использовать временную таблицу, чтобы оставить внешнее соединение с другим 2.

Пример:

DROP TABLE temptbl IF EXISTS;
CREATE TEMPORARY TABLE temptbl (myDate DATETIME PRIMARY KEY)
    AS (SELECT MyDate FROM table1)
    UNION (SELECT MyDate FROM table2)
    ORDER BY MyDate;
SELECT * FROM temptbl
    LEFT OUTER JOIN table1 USING (MyDate)
    LEFT OUTER JOIN table2 USING (MyDate);
0 голосов
/ 17 августа 2016
select coalesce(t2.data,'')+coalesce(t1.data,'') as data,
    t2.col1, t2.col2, t2.col3 ,t2.col4 ,t1.cola ,t1.colb, t1.colc
from table2 as t2
full outer join 
table1 t1
on t2.data = 2011-02-03
or t1.data = 2011-02-02
...