Подтвердить что ты не робот

Как я могу объединить столбцы из двух таблиц в один вывод?

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

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

4b9b3361

Ответ 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