Postgresql加入一列有2个非空列

时间:2016-03-14 16:04:53

标签: postgresql

我有2个表,我希望按ID匹配。

编辑:表1:

setInterval(function() {
  if (!window.opener++) {
    console.log("print's once")
  }
  else {
    console.log("print's the remaining times")
  }
}, 3000);

表2:

    | id  | other columns A |
    | 23  |   ...           |
    | 27  |   ...           |
    | 9   |   ...           | 
    | 50  |   ...           | 

问题是第二个表包含2个ID列:首先是新ID,第二个是旧ID - 两者都可以匹配第一个表中的ID。

编辑:表A中有一些行,ID既不与id_new也不与id_old相匹配。但我希望他们留在新表中。

这是我想要的结果:

| id_new  | id_old | other columns B
| 23      |   7    | ...
| 27      |   8    | ...
| 33      |   9    | ...

我试过这个,但它是一个庞大的数据集,我的查询需要很长时间才能执行。

     | id  | id_new | id_old | other columns A + B
     | 23  |  23    |   7    |  A + B
     | 27  |  27    |   8    |  A + B
     | 9   |  33    |   9    |  A + B 
     | 50  |  --    |   --   |  A

2 个答案:

答案 0 :(得分:0)

这是你需要的吗?

select table1.id, IFNULL(T2A.id_new, T2B.id_new) as id_new
, IFNULL(T2A.id_old, T2B.id_old) as id_old
FROM table1 
LEFT JOIN table2 as T2A ON table1.id = T2A.id_new 
LEFT JOIN table2 as T2B ON table1.id = T2B.id_old

答案 1 :(得分:0)

WITH t1(id,o_t1) AS ( VALUES
  (23,'...'),
  (27,'...'),
  (9,'...')
), t2(id_new,id_old,o_t2) AS ( VALUES
  (23,7,'...'),
  (27,8,'...'),
  (33,9,'...')
)
SELECT t1.id,t2.id_new,t2.id_old,t1.o_t1,t2.o_t2 FROM t1
  INNER JOIN t2 ON t2.id_new = t1.id
UNION ALL
SELECT t1.id,t2.id_new,t2.id_old,t1.o_t1,t2.o_t2 FROM t1
  INNER JOIN t2 ON t2.id_old = t1.id;

结果:

 id | id_new | id_old | o_t1 | o_t2 
----+--------+--------+------+------
 23 |     23 |      7 | ...  | ...
 27 |     27 |      8 | ...  | ...
  9 |     33 |      9 | ...  | ...
(3 rows)