0

我想知道我是否可以首先在完整列列表上的两个表之间执行完整外部联接,如果失败,则执行部分列列表。例如:

Table A
|  a  |  b  |  c  |
+-----+-----+-----+
|  x  |  y  |  z  |
|  q  |  r  |  s  |


Table B
|  a  |  b  |  c  |  d  |  e  |
+-----+-----+-----+-----+-----+
|  q  |  r  |  s  |  t  |  u  |
|  q  |  r  |     |  x  |  y  |
|     |     |     |  x  |  y  |

Failed query:
SELECT *
FROM A FULL OUTER JOIN B
ON
 (A.a = B.a AND A.b = B.b AND A.c = B.c)
 OR (A.a = B.a AND A.b = B.b)

Desired result
|  a  |  b  |  c  |  d  |  e  |
+-----+-----+-----+-----+-----+
|  x  |  y  |  z  |     |     |
|  q  |  r  |  s  |  t  |  u  |
|  q  |  r  |     |  x  |  y  |
|     |     |     |  x  |  y  |

我正在使用 Postgresql。感谢你的协助。

4

1 回答 1

1

此查询将准确产生所需的结果:

SELECT *
FROM   A
FULL   JOIN B USING (a,b,c)
ORDER  BY a DESC NULLS LAST;

但我并不完全相信您的示例符合您的描述 - 这为解释留下了空间。

于 2012-06-22T04:53:42.283 回答