PostgreSQL多值查询需求:关联jobs与users表实现名称映射
实现ID到名称的映射查询
刚好处理过类似的需求,要把jobs表中job1、job2的ID替换成users表对应的名称,咱们通过两次关联users表就能搞定,具体实现如下:
最终PostgreSQL查询语句
SELECT j.num, u1.name AS job1, u2.name AS job2 FROM jobs j LEFT JOIN users u1 ON j.job1 = u1.id LEFT JOIN users u2 ON j.job2 = u2.id;
代码说明
- 给表起别名是关键:把jobs表简称为
j,users表分别用u1(对应job1字段的关联)和u2(对应job2字段的关联),这样能避免同一张表多次关联时的字段冲突。 - 选用
LEFT JOIN是为了兼容极端情况:如果jobs表中某个job1/job2的ID在users表中找不到匹配项,查询结果依然会保留这条记录,对应位置显示NULL;如果确定所有ID都能在users表找到,换成INNER JOIN也完全可行。 - 用
AS重命名字段,保证输出结果的字段名和你要求的一致。
实际执行结果
运行这段查询后,会得到如下结果(注意:原需求里第二条的job1写的是name6,但users表中没有id=23的记录,所以实际返回NULL,如果是笔误可以调整数据或需求哦):
| num | job1 | job2 |
|---|---|---|
| 1 | name4 | name3 |
| 2 | NULL | name5 |
| 3 | name1 | name3 |
| 4 | NULL | name1 |
| 5 | name2 | NULL |
内容的提问来源于stack exchange,提问作者lehtojy1
相关产品推荐
相关产品推荐

