如何将两个表中的列合并为一个输出?

时间:2010-03-02 01:49:08

标签: sql postgresql

我有两张表格相似的表格。我们称他们为items_aitems_b。他们应该是一个,但他们来自不同的来源,所以他们不是。当我完全加入这两个表时,某些行最终得到来自一个或两个表的数据。两个表中的一列是category_id。我想使用category_id将组合表与类别表进行交叉。但是,我现在有两个category_id列(一个来自items_a,另一个来自items_b)。有没有办法将两列合并为一个?

我希望这不会让人感到困惑。

6 个答案:

答案 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