postgresql - 左连接有什么问题?
问题描述
我正在使用 postgres,我正在尝试使用左连接来连接两个表。我希望包含左侧的所有列和右侧的所有列。
SELECT * FROM table1 a
LEFT JOIN table2 b on
a.id = b.id;
当我运行它时,没有新列,只有 table1 中的列在表中。我无法弄清楚出了什么问题。我也尝试进行外部连接,但 table1 中仍然没有新列。
这是我想做的一个例子:
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 fiddle 的链接:http ://sqlfiddle.com/#!17/96afa/2
解决方案
我希望包含左侧的所有列和右侧的所有列。
严格来说,你没有。您想要的结果只显示一id
列。
您可以使用USING
连接中的子句来实现:
SELECT *
FROM table1 a
LEFT JOIN table2 b USING (id);
形式的子句是 Also
USING ( a, b, ... )
的简写,意味着每对等效列中只有一个将包含在连接输出中,而不是两者都包含。ON left_table.a = right_table.a AND left_table.b = right_table.b ....
USING
这是绝对不可能的:
当我运行它时,没有新列,只有 table1 中的列在表中
一定是你的客户端显示有问题。或者其他什么误解。一些客户确实存在重复列名的问题 - 我的查询消除了这一问题。
这将从查询中创建一个新表:
CREATE TABLE table3 AS
SELECT *
FROM table1 a
LEFT JOIN table2 b USING (id);
推荐阅读
- python - 使用 xPath 从父节点和后代节点中提取文本
- php - 如何在数组中包含多个键和值
- html - 如何找到要更改的 CSS
- c# - 生成 20 个随机数并在数组中搜索一个数字的程序
- firebase - 访问 userId 而不将其作为字段
- sql-server - 有没有办法将数据从 SQL 文件导入 Linux 上的 Microsoft SQL Server Express Edition?
- python - 通过 Python 绘制密度图
- reactjs - 酶覆盖率报告显示 inbuild 功能作为覆盖率报告中的发现功能
- java - Jsp如何用响应sendredirect编写html字符串
- php - 嵌入在 php 生成的 doc 中的图像在移动设备(android 和 ios)中打开时不显示