2010-02-16 2 views
1

I м подбирая данные из двух разных таблиц с не совпадающих столбцов не с помощью этого запроса SQL
дифференцируемые строки в таблице накидной

 select * from (SELECT s.shout_id, s.user_id, s.time FROM shouts s 
union all 
select v.post_id, v.sender_user_id, v.time from void_post v) 
as derived_table order by time desc; 

Теперь есть ли другой способ или с этим SQL заявления может только я дифференцировать данные из двух таблиц.

Я думал о фиктивной строке, которая может быть создана во время выполнения (только в инструкции выбора), которая будет помечать строку из обеих таблиц.

Поскольку я не могу отличить крик_ид, который вызывается в объединенной таблице, это shout_id из таблицы криков или из таблицы void_post.

Благодаря
Pradyut

ответ

4

Вы можете просто включить дополнительный столбец в каждой выберите (я предлагаю БИТ)

select * from 
(SELECT s.shout_id, s.user_id, s.time, 1 AS FromShouts FROM shouts s 
union all 
select v.post_id, v.sender_user_id, v.time, 0 AS FromShouts from void_post v) 
as derived_table order by time desc; 
+0

немного занимает меньше MEM I думаю .... –

+0

и приложения progs будут иметь более быструю обработку ... –

2

Фиктивная переменная является хорошим способом сделать это. В большой схеме вещей не так много накладных расходов.

p.s., переменная-пустышка представляет собой столбец и не строка.

5

Несомненно, просто добавьте новое поле в свой оператор select, называемый как source с различным постоянным значением для каждого источника.

SELECT s.shout_id, s.user_id, s.time, 'shouts' as source FROM shouts s 
UNION ALL 
SELECT v.post_id, v.sender_user_id, v.time, 'void_post' as source FROM void_post v 
+2

+1 - Ба, бить меня к нему :) – AdaTheDev

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