1

我有两个关系relation1 和relation2,其中relation1 有A、B、C 列,relation2 有D、E、F 列。对于查询,我正在对 C=F 上的关系 1 和关系 2 进行完全连接。

SELECT A,B,C,D,E,F 
  FROM relation1 r1 FULL JOIN relation r2 
    ON r1.C=r2.F

所以当 C=F 时,结果包含

A,B,C,D,E,F values

当 C 不在 F 结果包含

A,B,C, null,null,null

当 F 不在 C 结果中时包含

null,null,null,D,E,F

这是我所期望的。现在我想做 C,F 在结果中用相同的名称(M)标识。所以当 C=F 时,结果包含

A,B,M,D,E values

当 C 不在 F 结果包含

A,B,M, null,null,null

当 F 不在 C 结果中时包含

null,null,null,D,E,M

如何得到这个?

4

4 回答 4

1

你在找这个吗?

SELECT A, B, D, E, COALESCE(C, F) M 
  FROM relation1 r1 FULL JOIN relation2 r2 
    ON r1.C = r2.F

假设关系1:

| 一个 | 乙| C |
---------------
| a1 | b1 | 1 |
| a2 | b2 | 2 |

和关系2:

| D | E | F |
---------------
| d1 | e1 | 1 |
| d3 | e3 | 3 |

输出将是

| 一个 | 乙| D | E | 中号 |
-----------------------------------------
| a1 | b1 | d1 | e1 | 1 |
| a2 | b2 | (空) | (空) | 2 |
| (空) | (空) | d3 | e3 | 3 |

这是SQLFiddle演示

于 2013-07-19T05:22:56.840 回答
0
SELECT A,B,
  case when C is not null then M end,
  D,E,
  case when F is not null then M end
FROM relation1 r1 
  FULL JOIN relation r2 
ON r1.C=r2.F

除非 M 只是一个别名,否则

SELECT A,B,C as M, D,E, F as M
FROM relation1 r1 
  FULL JOIN relation r2 
ON r1.C=r2.F
于 2013-07-19T08:39:25.703 回答
0

您可以在查询中使用别名,即 C as M 和 F as M

于 2013-07-19T04:28:11.823 回答
0

没有办法在列表中有M(作为名称)SELECT两次。输出列名称必须是唯一的。

一般来说,我更喜欢@peterm 的解决方案COALESCE()就像我回答你的最后一个问题一样)。这是使用子查询和条件子句
实现相同目的的另一种方法。USINGJOIN

SELECT A, B, D, E, M 
FROM      (SELECT A, B, C AS M FROM relation1) r1
FULL JOIN (SELECT D, E, F AS M FROM relation2) r2 USING (M)
于 2013-07-19T10:16:19.710 回答