2010-06-11 3 views
10

У меня есть этот запрос (который я удалил некоторые ключи для краткости):Как добавить столбец в этот результат объединения?

SELECT id as in_id, out_id, recipient, sender, read_flag 
    FROM received WHERE recipient=1 
UNION ALL 
SELECT in_id, id AS out_id, recipient, sender, read_flag 
    FROM sent WHERE sender=1 

который сочетает в себе результаты из двух таблиц, показывающих сообщения, отправленные и полученные с помощью данного пользователя. То, что я хотел бы сделать, это добавить столбец/флаг в результат, чтобы отличить таблицу, к которой принадлежит строка, поэтому, когда я их показываю, я могу показать соответствующий значок для отправленных или полученных сообщений. Как бы добавить это?

ответ

16

Просто добавьте постоянный столбец к каждому запросу. Неважно, какой тип такой, какой он есть в обеих частях. Таким образом, вы могли бы использовать 0 и 1 или две строки, например:

SELECT id as in_id, out_id, recipient, sender, read_flag , 'received' as source 
    FROM received WHERE recipient=1 
UNION ALL 
SELECT in_id, id AS out_id, recipient, sender, read_flag , 'sent' as source 
    FROM sent WHERE sender=1 
+0

Удивительное спасибо! +1 – 2010-06-11 17:01:31

+0

Очень полезный вопрос и отличный ответ! Спасибо –

+0

Спасибо @Mark Byers – aziz

2

Просто добавьте столбец в каждой выбрать с жестко закодированного значения:

 
SELECT id as in_id, out_id, recipient, sender, read_flag, 'received' as source_table 
    FROM received WHERE recipient=1 
UNION ALL 
SELECT in_id, id AS out_id, recipient, sender, read_flag, 'sent' as source_table 
    FROM sent WHERE sender=1 
+0

И спасибо! – 2010-06-11 17:01:49

2

Это будет делать это:

SELECT 'r' as type, id as in_id, out_id, recipient, sender, read_flag 
    FROM received WHERE recipient=1 
UNION ALL 
SELECT 's' as type, in_id, id AS out_id, recipient, sender, read_flag 
    FROM sent WHERE sender=1 
+0

Ты все такой добрый, спасибо! – 2010-06-11 17:04:46

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