Как объединить строки из 2 таблиц с одинаковыми и разными столбцами

У меня есть две таблицы для пользовательских сообщений, одна для текстового сообщения и одна для мультимедийного сообщения, структура обеих таблиц следующая.

таблица text_post

+--------+--------------+-----------+-----------+-----------------+-----------+
| postid | post_content | post_user | post_type | post_visibility | post_date |
+--------+--------------+-----------+-----------+-----------------+-----------+

таблица multimedia_post

+-------+------------+--------+---------+---------+---------------+---------+
|post_id|post_content|post_url|post_user|post_type|post_visibility|post_date|
+-------+------------+--------+---------+---------+---------------+---------+

в text_post post_content — это текстовые данные, размещенные пользователем, а в media_post post_content — это текст подписи, связанный с мультимедийным файлом, поэтому в основном post_content — это текст. все столбцы общие, только post_url отличается в media_post, я хочу объединить результат этих двух таблиц следующим образом

+-------+------------+--------+---------+---------+---------------+---------+
|post_id|post_content|post_url|post_user|post_type|post_visibility|post_date|
+-------+------------+--------+---------+---------+---------------+---------+
|  1    |  some text | null   | 1       | <type>  | <visibility>  | <date>  |
+-------+------------+--------+---------+---------+---------------+---------+
|  1    | img_caption| <url>  | 1       | <type>  | <visibility>  | <date>  |
+-------+------------+--------+---------+---------+---------------+---------+
..and so on

здесь 1-я строка возвращается из text_post, поэтому post_url устанавливается в нуль, потому что только multimedia_post имеет этот столбец... а вторая строка из multimedia_post, поскольку есть URL сообщения...

Как я могу этого добиться?


person vikas devde    schedule 08.04.2013    source источник


Ответы (3)


Вы можете UNION ALL из двух SELECT, которые возвращают столбцы, которые "выстраиваются", например:

SELECT
    postid as post_id
,   post_content
,   null as post_url
,   post_user
... -- the rest of text_post columns included in the select
FROM text_post
UNION ALL
SELECT
    post_id
,   img_caption as post_content
,   post_url
,   post_user
... -- the rest of multimedia_post columns included in the select
FROM multimedia_post

Обратите внимание, как null as post_url выбирается из text_post: это необходимо для выравнивания столбцов двух операторов select.

person Sergey Kalinichenko    schedule 08.04.2013

Используйте СОЮЗ

SELECT 
  postid, post_content, NULL, post_user, post_type, post_visibility, post_date 
FROM
  text_post
UNION
 SELECT 
  postid, post_content, post_url, post_user, post_type, post_visibility, post_date 
FROM
  multimedia_post
person Nedret Recep    schedule 08.04.2013

Вы должны использовать полное внешнее соединение для обеих таблиц.

 select post_id,post_content,post_url,post_user,post_type,post_visibility,
 post_date from 
 text_post as tp, multimedia_post as mp 
 on tp.post_id = mp.post_id
person Mohan Raj B    schedule 08.04.2013