Как я могу объединить столбцы из двух таблиц в один вывод? - PullRequest
41 голосов
/ 02 марта 2010

У меня есть две таблицы с похожей информацией. Давайте назовем их items_a и items_b. Они должны быть едины, но они поступают из разных источников, поэтому это не так. Когда я полностью объединяю две таблицы, некоторые строки заканчиваются данными из одной или обеих таблиц. Один из столбцов в обеих таблицах - category_id. Я хотел бы пересечь объединенную таблицу с таблицей категорий, используя category_id. Однако теперь у меня есть два столбца category_id (один из items_a и один из items_b). Есть ли способ объединить две колонки в одну?

Надеюсь, это не слишком запутанный вопрос.

Ответы [ 5 ]

50 голосов
/ 02 марта 2010

Задание столбцов в вашем запросе должно помочь:

select a.col1, b.col2, a.col3, b.col4, a.category_id 
from items_a a, items_b b 
where a.category_id = b.category_id

следует сделать то же самое в отношении выбора нужных столбцов.

Чтобы обойти тот факт, что некоторые данные есть только в items_a, а некоторые - только в items_b, вы можете сделать:

select 
  coalesce(a.col1, b.col1) as col1, 
  coalesce(a.col2, b.col2) as col2,
  coalesce(a.col3, b.col3) as col3,
  a.category_id
from items_a a, items_b b
where a.category_id = b.category_id

Функция coalesce вернет первое ненулевое значение, поэтому для каждой строки, если col1 не ноль, она будет использовать это, в противном случае она получит значение из col2 и т. Д.

24 голосов
/ 02 марта 2010

Я предполагаю, что вы хотите сделать UNION из обеих таблиц .

Если обе таблицы имеют одинаковые столбцы, вы можете просто сделать

SELECT category_id, col1, col2, col3
  FROM items_a
UNION 
SELECT category_id, col1, col2, col3 
  FROM items_b

Иначе, возможно, вам придется сделать что-то вроде

SELECT category_id, col1, col2, col3
  FROM items_a 
UNION 
SELECT category_id, col_1 as col1, col_2 as col2, col_3 as col3
  FROM items_b
0 голосов
/ 26 октября 2016

Если у вас три таблицы или более, просто добавьте объединение и оставьте внешнее объединение:

select a.col1, b.col2, a.col3, b.col4, a.category_id 
from 
(
    select category_id from a
    union
    select category_id from b
) as c
left outer join a on a.category_id = c.category_id
left outer join b on b.category_id = c.category_id
0 голосов
/ 20 августа 2015
SELECT col1,
  col2
FROM
  (SELECT rownum X,col_table1 FROM table1) T1
INNER JOIN
  (SELECT rownum Y, col_table2 FROM table2) T2
ON T1.X=T2.Y;
0 голосов
/ 19 декабря 2012

У меня была похожая проблема с небольшим отличием: некоторые a.category_id не в b, а некоторые b.category_id не в a.
Чтобы решить эту проблему, просто адаптируйте отличный ответ от beny23 на

select a.col1, b.col2, a.col3, b.col4, a.category_id 
from items_a a
LEFT OUTER JOIN
items_b b 
on a.category_id = b.category_id

Надеюсь, это кому-нибудь поможет.
С уважением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...