PostgreSQL中如何通过Lookup表关联Customer表获取对应列数据?
问题分析与解决方法
你的原查询问题出在**where条件里同时要求lk_id = name和lk_id = address**,这意味着只有当name和address的值完全相同时才会返回结果,完全不符合你分别匹配两个字段的需求。
要实现类似Excel中两次VLOOKUP的效果(用name和address分别去Lookup表匹配获取对应详细值),你需要两次关联Lookup表,给每次关联的表起不同别名来区分用途:
假设Lookup表的两列是lk_id(匹配键)和lk_value(存储的详细信息),正确的查询语句如下:
SELECT c.name, l1.lk_value AS name_detail, -- name对应的详细值 c.address, l2.lk_value AS address_detail -- address对应的详细值 FROM customer c LEFT JOIN lookup l1 ON l1.lk_id = c.name -- 关联name对应的Lookup记录 LEFT JOIN lookup l2 ON l2.lk_id = c.address; -- 关联address对应的Lookup记录
补充说明:
- 用
LEFT JOIN可以保证即使name或address在Lookup表中没有匹配项,Customer表的记录依然会被保留(对应详细值为NULL);如果只需要完全匹配的记录,换成INNER JOIN即可。 - 给Lookup表起
l1和l2的别名,是为了区分两次关联的不同逻辑,避免字段冲突。
内容的提问来源于stack exchange,提问作者Druva
相关产品推荐
相关产品推荐

