mysql - PostgreSQL 在不乘列的情况下连接两个表

标签 mysql postgresql join

我想连接两个有很多列的表。 它看起来像这样:

-----------------------------------------------
|   gid   |  geom   |  ogc_fid   | nuts |.... |
|    1    |  ...    |    ...     | ...  |.... |
|    2    |  ...    |    ...     | ...  |.... |
|    3    |  ...    |    ...     | ...  |.... |
|    4    |  ...    |    ...     | ...  |.... |

我想将它与其他有更多列的表连接起来,但其中许多列与第一个相同,所以它看起来像这样:

 _________________________________________________________
|   gid   |  geom   |  ogc_fid   | nuts |  x  |  y  |  z  |
|    1    |  ...    |    ...     | ...  |.... |  .  |  .  |
|    2    |  ...    |    ...     | ...  |.... |  .  |  .  |
|    3    |  ...    |    ...     | ...  |.... |  .  |  .  |
|    4    |  ...    |    ...     | ...  |.... |  .  |  .  |

加入后它应该看起来与第二个表相同。但是有第一个和第二个的所有记录。

我试着这样做:

select *from "migration"."X" as tab1
full outer join "migration"."Y" as tab2 on tab1.gid = tab2.gid;

但我的结果是这样的:

-------------------------------------------------------------------------------------------------------
|   gid   |  geom   |  ogc_fid   | nuts |.... |  gid   |  geom   |  ogc_fid   | nuts |  x  |  y  |  z  |
|    1    |  ...    |    ...     | ...  |.... |   1    |  ...    |    ...     | ...  |.... |  .  |  .  |
|    2    |  ...    |    ...     | ...  |.... |   2    |  ...    |    ...     | ...  |.... |  .  |  .  |
|    3    |  ...    |    ...     | ...  |.... |   3    |  ...    |    ...     | ...  |.... |  .  |  .  |
|    4    |  ...    |    ...     | ...  |.... |   4    |  ...    |    ...     | ...  |.... |  .  |  .  |

我尝试了很多不同的查询,但没有得到我想要的结果。有人可以帮助我吗?

最佳答案

您可以使用 NATURAL 来确保同名的列只列出一次:

SELECT * FROM "migration"."X" NATURAL FULL OUTER JOIN "migration"."Y";

The FROM Clause 引用 PostgreSQL 文档:

NATURAL is a shorthand form of USING: it forms a USING list consisting of all column names that appear in both input tables. As with USING, these columns appear only once in the output table. If there are no common column names, NATURAL JOIN behaves like JOIN ... ON TRUE, producing a cross-product join.

请注意,如果有些行的值与具有相同名称的列不匹配,NATURAL FULL OUTER JOIN 将使这些行在结果中出现多次。例如,如果对于 x.gid = y.gid = 1x.geomy.geom 不同,您将在结果,一个具有 x 的值,另一个具有 y 的值。因此,只有当您知道共享列将具有与任何给定 gid 匹配的值时,才应使用此方法。

关于mysql - PostgreSQL 在不乘列的情况下连接两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46297044/

相关文章:

mysql - MySQL中的基数是什么?

mysql - OR WHERE 和 AND 在 mySQL 查询中

mysql - group_concat 在 MySQL 中有多个连接

php - 在 Codeigniter 上对多个用户使用 $this->db->insert_id()

PHP 页面不显示 mysqli fetch

postgresql - PL/pgSQL 无限循环

postgresql - 如何强制 PostgreSQL 使用我的索引?

sql - 如何从日期PostgreSQL中提取一个月中的星期几

join - parse.com 从连接表中选择

sql - 2 个表上的简单内连接导致错误的估计行和性能下降