我有两个具有类似信息的表。我们称它们为items_a
和items_b
。它们应该是一个,但它们来自不同的来源,所以它们不是。当我完全连接这两个表时,一些行最终会来自一个或两个表的数据。两个表中的一列是category_id
。我想用category_id
与类别表交叉。但是,我现在有两个category_id
列(一个从items_a
和一个从items_b
)。有没有办法将两列合并为一个?如何将两个表中的列合并为一个输出?
我希望这不是太混乱的一个问题。
我有两个具有类似信息的表。我们称它们为items_a
和items_b
。它们应该是一个,但它们来自不同的来源,所以它们不是。当我完全连接这两个表时,一些行最终会来自一个或两个表的数据。两个表中的一列是category_id
。我想用category_id
与类别表交叉。但是,我现在有两个category_id
列(一个从items_a
和一个从items_b
)。有没有办法将两列合并为一个?如何将两个表中的列合并为一个输出?
我希望这不是太混乱的一个问题。
指定您的查询的列应该做的伎俩:
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
聚结函数将返回第一个非空值,所以对于每一行如果col1非空,它会使用它,否则它会从col2得到值,等等。
我想你想要做的是both tables的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
你的第一个例子不是有效的'UNION'语句 - 它应该是两个SELECT语句的组合。第二个示例不需要括号,并且在语法上是正确的。 – 2010-03-02 02:55:54
我有一个小的差异有类似的问题:一些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
希望这可以帮助别人。
此致敬礼。
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;
很难将其解读为原始问题的答案。虽然这个概念可能确实是对的,但它需要一些解释来展示它与问题的关系。 – Blackwood 2015-08-21 01:17:23
这个答案确实帮助我将两个不同表中的两列结合起来,并在单个查询中将它们显示为两个不同的列。 – 2018-01-29 22:30:23
当你的三个表以上,只需添加联盟和左外连接:
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
可我还用它在如: ...其中c.col1 = COALESCE( a.col1,b.col1) ? – burger 2010-03-02 04:30:39
@bigmac:不应该是个问题 – beny23 2010-03-02 13:00:20
如果没有共同的ID,该怎么办?我只是希望列没有共同的ID,只是他们出现的顺序彼此加入? – CMCDragonkai 2015-02-09 06:49:56