Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 首先在完整列列表上进行完全外部联接,否则为部分列列表_Sql_Postgresql - Fatal编程技术网

Sql 首先在完整列列表上进行完全外部联接,否则为部分列列表

Sql 首先在完整列列表上进行完全外部联接,否则为部分列列表,sql,postgresql,Sql,Postgresql,我想知道是否可以先在完整列列表上的两个表之间执行完全外部联接,如果失败,则执行部分列列表。 例如: Table A | a | b | c | +-----+-----+-----+ | x | y | z | | q | r | s | Table B | a | b | c | d | e | +-----+-----+-----+-----+-----+ | q | r | s | t | u | | q

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

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。感谢您的帮助。

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

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

但我并不完全相信你的例子符合你的描述,这给解释留下了余地。

谢谢欧文。在重新思考我的示例后,我意识到我的问题不在于联接,而在于如何查询联接结果。我的错误:选择A.A、A.b、A.c、b.d、b.e;而不是:选择a、b、c、d、e。