Как я могу объединить столбцы из двух таблиц в один вывод?
У меня есть две таблицы с подобной информацией. Назовите их items_a
и items_b
. Они должны быть едиными, но они исходят из разных источников, так что это не так. Когда я полностью присоединяюсь к двум таблицам, некоторые строки заканчиваются данными из одной или обеих таблиц. Один из столбцов в обеих таблицах - category_id
. Я хотел бы пересечь комбинированную таблицу с таблицей категорий, используя category_id
. Однако теперь у меня есть два столбца category_id
(один из items_a
и один из items_b
). Есть ли способ объединить два столбца в один?
Надеюсь, это не слишком запутывает вопрос.
Ответы
Ответ 1
Указание столбцов в вашем запросе должно сделать трюк:
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 и т.д.
Ответ 2
Я предполагаю, что вы хотите 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
Ответ 3
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;
Ответ 4
У меня была аналогичная проблема с небольшой разницей: некоторые 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
Надеюсь, это поможет кому-то.
С наилучшими пожеланиями.
Ответ 5
Когда ваши три таблицы или больше, просто добавьте объединение и левое внешнее соединение:
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