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
Postgresql 左连接有什么问题?_Postgresql_Left Join - Fatal编程技术网

Postgresql 左连接有什么问题?

Postgresql 左连接有什么问题?,postgresql,left-join,Postgresql,Left Join,我正在使用postgres,我正在尝试使用left join连接两个表。我希望包含左侧的所有列和右侧的所有列 SELECT * FROM table1 a LEFT JOIN table2 b on a.id = b.id; 当我运行它时,没有新的列,只有表1中的列在表中。我想不出是怎么回事。我也尝试进行外部联接,但表1中仍然没有新的列 下面是我想做的一个例子: tabel1: +------------+---------------+--------------+ | id

我正在使用postgres,我正在尝试使用left join连接两个表。我希望包含左侧的所有列和右侧的所有列

SELECT * FROM table1 a
LEFT JOIN table2 b on
a.id = b.id;
当我运行它时,没有新的列,只有表1中的列在表中。我想不出是怎么回事。我也尝试进行外部联接,但表1中仍然没有新的列

下面是我想做的一个例子:


tabel1:
+------------+---------------+--------------+
| id         | COMPANY_NAME  | COMPANY_CITY |
+------------+---------------+--------------+
| 18         | Order All     | Boston       |
| 15         | Jack Hill Ltd | London       |
| 16         | Akas Foods    | Delhi        |
| 17         | Foodies.      | London       |
| 19         | sip-n-Bite.   | New York     |
+------------+---------------+--------------+


table2:
+--------------+-----------+
| ITEM_NAME    | id        |
+--------------+-----------+
| Chex Mix     |  16       |
| Cheez-It     |  15       |
| BN Biscuit   |  15       | 
| Mighty Munch |  17       | 
| Pot Rice     |  15       | 
| Jaffa Cakes  |  18       |
| Salt n Shake |           |
+--------------+-----------+

我希望最终结果如下所示:

id         COMPANY_NAME              COMPANY_CITY              ITEM_NAME
---------- ------------------------- ------------------------- ---------- 
16         Akas Foods                Delhi                     Chex Mix
15         Jack Hill Ltd             London                    Cheez-It
15         Jack Hill Ltd             London                    BN Biscuit
17         Foodies.                  London                    Mighty Munch
15         Jack Hill Ltd             London                    Pot Rice
18         Order All                 Boston                    Jaffa Cakes
19         sip-n-Bite.               New York

我还检查以确保不同表中的两个ID之间存在匹配,并且没有匹配

我使用psql运行了查询,结果显示:

SELECT 2000
然后看看我有什么专栏,我跑

\d table1

这里有一个指向我试图实现的sql FIDLE的链接:

您可以显式指定每个表的列。使用aterix,看起来是这样的:

SELECT b.*
FROM table1 a
 LEFT JOIN table2 b 
  on a.id = b.id;

使用以下数据进行测试:

我希望包含左侧的所有列和右侧的所有列

SELECT * FROM table1 a
LEFT JOIN table2 b on
a.id = b.id;
严格地说,你没有。您想要的结果只显示一个
id
列。
您可以通过join中的
USING
子句来实现这一点:

选择*
来自表1 a
使用(id)左连接表2b;

使用(A,b,…)的
形式的子句是左表上
的缩写。A=右表。A和左表。b=右表。b….
另外,
使用
意味着每对等效列中只有一列 将包含在联接输出中,而不是两者都包含


这是绝对不可能的:

当我运行它时,没有新的列,只有表1中的列在表中

您的客户端中的显示肯定有问题。或者其他一些误解。有些客户端确实存在重复列名的问题,这可以通过我的查询消除

这将来自查询:

将表3创建为
挑选*
来自表1 a
使用(id)左连接表2b;

请发布一些有代表性的数据。分享您的数据也会有帮助。现在,我们不知道您正在尝试加入什么。您正在使用什么工具来运行此查询?是的,但是您正在使用什么查询工具?pgadmin?psql?还有什么吗?您可以从psql复制/粘贴查询及其结果吗?一定是误会了……我也试过了,也有同样的问题。我明白了。我们需要一些有代表性的数据来帮助你。