2013-11-22 3 views
0

Рассмотрим у меня есть следующие две таблицы (грубые эскизы):заказ MySQL по времени на двух разных таблиц

Таблица 1:

  • t1Id (Int, первичный ключ)
  • Время (DateTime)
  • attribute1
  • attribute2
  • attribute3

Таблица 2:

  • t2Id (Int, первичный ключ)
  • Время (DateTime)
  • attribute4
  • attribute5

Предположим, что я хочу, чтобы выбрать результаты из обеих таблиц и заказать их на time, это выполнимо? Я сам думал, что это было бы возможно, если:

  • Вы можете создать союз со всеми столбцами обеих таблиц, но time, разделяемых над объединением.
  • NULL значения в местах, где это не соответствует. Например, строка таблицы 1 в этом объединении имела бы NULL в t2Id, attribute4 и attribute5.
  • Дополнительный столбец, указывающий, из какой таблицы были взяты исходные строки (те, у которых значения NULL).

Как бы я мог спроектировать такой запрос наиболее эффективным способом?

+0

Я бы сделал это, как вы упоминаете: UNION с ORDER BY time. дополнительная колонка зависит от вас. Если вы хотите, чтобы что-то сообщило вам, откуда оно взялось. –

+0

И что случилось с 'UNION' +' ORDER BY'? Если вы хотите, чтобы ваш результат был как один, вы должны это сделать точно. Что касается 'NULL'-s: уточните, что с ними не так: для объединения все ваши таблицы должны иметь одинаковое количество столбцов –

ответ

1
SELECT * FROM (
    SELECT t1Id,time , attribute1,attribute2,attribute3 FROM table1 
    UNION ALL 
    SELECT t2Id ,time , attribute3,attribute4,"" FROM table2 
)AA 
ORDER BY AA.time 
+0

, что выглядит не очень практично. Вы не знаете, какие из них. по крайней мере, поместите столбец, указав, являются ли они из таблицы1 или таблицы2 –

Смежные вопросы