我有两张表格相似的表格。我们称他们为items_a
和items_b
。他们应该是一个,但他们来自不同的来源,所以他们不是。当我完全加入这两个表时,某些行最终得到来自一个或两个表的数据。两个表中的一列是category_id
。我想使用category_id
将组合表与类别表进行交叉。但是,我现在有两个category_id
列(一个来自items_a
,另一个来自items_b
)。有没有办法将两列合并为一个?
我希望这不会让人感到困惑。
答案 0 :(得分:49)
指定查询中的列应该可以解决问题:
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函数将返回第一个非null值,因此对于每一行,如果col1为非null,它将使用它,否则它将从col2获取值等。
答案 1 :(得分:23)
我想你想要做的是UNION
both tables。
如果两个表具有相同的列,则可以执行
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
答案 2 :(得分:0)
最佳答案假定两个结果都不为空。在我的要求中,我有两个表需要在没有连接约束的情况下制作 1。我只是把它们结合起来。
如果你想得到结果,不管 1 是否为空。
select a.col1, b.col2, a.col3, b.col4, a.category_id
from items_a a
full outer join items_b b
on 1=1
应该可以解决问题。 当我实际上这样做时,我不得不走得更远,对我想连接在一起的两个“集合”使用表表达式,然后完全外部连接这两个集合。
答案 3 :(得分:0)
选择a.categoryname、b.productname、a.categoryid 从类别a 左外连接 产品b a.categoryid = b.categoryid ;
答案 4 :(得分:-1)
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;
答案 5 :(得分:-2)
如果你是三个或更多的表,只需添加union和left outer join:
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