【发布时间】:2017-08-22 12:43:12
【问题描述】:
tbl_picklist 表
id value
1 John
2 Mumbai
3 San Diego
4 CA
5 Jerry
tbl_user 表
id picklist_id_name email
1 1 john@test.com
2 8 jerry@gmail.com
tbl_profile 表
id user_id picklist_id_addr picklist_id_addr2 designation
1 1 3 5 Dev
3 2 7 3 QA
Picklist 是一个表格,您将在其中获取地址、地址 2 和名称的值, 我写的查询给了我想要的结果
SELECT
u.email,
p1.value AS username,
p2.value AS addr1,
p3.value AS addr2
FROM tbl_user u
LEFT JOIN tbl_picklist AS p1
ON u.picklist_id_name = p1.id
LEFT JOIN tbl_profile pr
ON pr.user_id = u.id
LEFT JOIN tbl_picklist AS p2
ON p2.id = pr.picklist_id_addr
LEFT JOIN tbl_picklist AS p3
ON p3.id = pr.picklist_id_addr2
结果:
email username addr1 addr2
john@test.com John Mumbai San Diego
jerry@gmail.com Jerry CA Mumbai
要获得上述结果,我需要在选择列表表上编写 3 个连接, 有没有其他方法可以让我只通过选择列表表上的一个连接来获得结果? 我在应用程序中有这种表结构,许多值存储在选择列表表中,执行这种查询需要很多时间。
【问题讨论】:
-
问题不在于连接,而在于您没有调整查询。您是否应用了任何索引?
-
@TimBiegeleisen 是的,所有表都有索引
-
哪些列有索引?
-
在选项列表中,值列
-
请使用
explain analyze的输出更新您的帖子,并提供应用于这些表的确切索引定义。
标签: sql postgresql join left-join