Мне нужно поддерживать приложение, база данных которого немного не работает, и у меня была следующая задача присоединиться к 3 таблицам:
временная метка table1, zid, aaa
временная метка table2, zid, bbb
Идентификатор таблицы3, некоторые, другие, данные
Таким образом, таблицы 1 и 2 должны быть объединены и отсортированы по столбцам временных меток. Мне также нужно сохранить столбец aaa table1 и bbb table2 и иметь возможность различать, является ли это aaa или bbb. Затем мне нужно присоединиться к другой таблице через их столбец zid.
Вот мой рабочий sql для этого:
SELECT *
FROM
table3
LEFT JOIN
(
SELECT table1.timestamp AS timestamp,
table1.zid,
table1.aaa AS responses,
'aaas'
FROM table1
UNION ALL
SELECT table2.timestamp AS timestamp,
table2.zid,
table2.aaa AS responses,
'bbbs'
FROM table2
) aaasAndbbbs ON table3.id = aaasAndbbbs.zid
ORDER BY timestamp ASC;
Вышеприведенный sql делает именно то, что я хочу, но я хочу знать, есть ли лучший способ. Здесь я использую столбец «aaas», чтобы различать, является ли это aaa или bbb, что кажется немного хакерским. Есть ли предпочтительный способ делать то, что я хочу?
UNION
ради производительности, если это возможно (например, если таблица1 содержит текущие данные, а таблица2 — исторические, запрос можно легко переписать без объединения). - person a1ex07   schedule 26.03.2014