SQL查询如何两次关联同一usuarios表分别获取操作员和主管姓名
问题核心原因
你遇到的是同表多次关联的别名冲突问题:
- 两次
LEFT JOIN同一个usuarios表没有指定不同别名,数据库无法区分你要取的是哪次关联的nome字段 - 额外注意:你原SQL的关联条件存在逻辑错误,
pdv_request.operador和supervisor都是int类型的用户ID,不能和usuarios.nome(用户名字段,字符串类型)做等值匹配,应该关联usuarios表的用户ID主键字段(下文假设该字段名为id,你可以替换为你表中实际的主键字段名)
修正后的SQL语句
SELECT pdv_request.req_id, pdv_request.data_caixa, pdv_request.turno, pdv_request.terminal, pdv_request.nro_venda, pdv_request.valor_venda, pdv_request.razao, u_op.nome as operador_nome, -- 读取操作员对应的姓名 u_sup.nome as supervisor_nome -- 读取主管对应的姓名 FROM pdv_request -- 第一次关联操作员对应用户表,指定别名u_op LEFT JOIN usuarios u_op ON pdv_request.operador = u_op.id -- 第二次关联主管对应用户表,指定别名u_sup LEFT JOIN usuarios u_sup ON pdv_request.supervisor = u_sup.id WHERE pdv_request.data_caixa NOT BETWEEN :dini AND :dfin ORDER BY pdv_request.data_caixa ASC
改动说明
- 给两次关联的
usuarios表分别指定了独立别名u_op、u_sup,避免表名冲突 - 修正了关联匹配逻辑,用用户ID字段做等值关联,保证数据匹配正确性
- 在SELECT子句中通过表别名分别读取两个关联表的
nome字段,指定不同的结果别名区分操作员姓名和主管姓名
内容的提问来源于stack exchange,提问作者Rodrigo P.
相关产品推荐
相关产品推荐

