mysql - 将具有不同值的两行连接在一行中
问题描述
在一行中获取两条记录
尝试的子句 group by 未获得所需的结果。
我有三个表:direccion
, punto_suministro
, r_servicio_punto_suministro
。
id_direccion others_fields
10 XXX
10 YYY
id_punto_suministro id_r_servicio_punto_suministro
6 1
7 2
id_r_servicio_punto_suministro id_servicio_gas id_servicio_luz
1 6 null
2 null 7
询问:
SELECT
punto_suministro.id_direccion,
CASE WHEN r_servicio_punto_suministro.id_servicio_gas IS NOT NULL THEN punto_suministro.id_punto_suministro END AS Gas,
CASE WHEN r_servicio_punto_suministro.id_servicio_luz IS NOT NULL THEN punto_suministro.id_punto_suministro END AS Luz
FROM
direccion
LEFT JOIN punto_suministro ON direccion.id_direccion = punto_suministro.id_direccion
LEFT JOIN r_servicio_punto_suministro ON punto_suministro.id_r_servicio_punto_suministro = r_servicio_punto_suministro.id_r_servicio_punto_suministro
LEFT JOIN servicio_gas ON r_servicio_punto_suministro.id_servicio_gas = servicio_gas.id_servicio_gas
LEFT JOIN servicio_luz ON r_servicio_punto_suministro.id_servicio_luz = servicio_luz.id_servicio_luz
WHERE direccion.id_direccion = 10;
查询返回两行:
id_direccion Gas Luz
10 6 null
10 null 7
我想要一条记录中的结果:
id_direccion Gas Luz
10 6 7
解决方案
您可以使用条件聚合。你只需要修改你的查询,CASE
用一个聚合函数包围 s ,例如MAX()
(MIN()
同样可以完成这项工作),并GROUP BY
在末尾添加一个子句:
SELECT
punto_suministro.id_direccion,
MAX(CASE WHEN r_servicio_punto_suministro.id_servicio_gas IS NOT NULL THEN punto_suministro.id_punto_suministro END) AS Gas,
MAX(CASE WHEN r_servicio_punto_suministro.id_servicio_luz IS NOT NULL THEN punto_suministro.id_punto_suministro END) AS Luz
FROM
direccion
LEFT JOIN punto_suministro ON direccion.id_direccion = punto_suministro.id_direccion
LEFT JOIN r_servicio_punto_suministro ON punto_suministro.id_r_servicio_punto_suministro = r_servicio_punto_suministro.id_r_servicio_punto_suministro
LEFT JOIN servicio_gas ON r_servicio_punto_suministro.id_servicio_gas = servicio_gas.id_servicio_gas
LEFT JOIN servicio_luz ON r_servicio_punto_suministro.id_servicio_luz = servicio_luz.id_servicio_luz
WHERE direccion.id_direccion = 10
GROUP BY punto_suministro.id_direccion;
推荐阅读
- python - 在 ggplot 中创建 3D 条形图
- java - 为什么Eclipse中会出现“选择无法启动且最近没有启动”的提示?
- python - 使用 Pip 与 Python 3.9 一起安装后导入模块时出错
- python - 派斯帕克;将一列列表拆分为多列
- batch-file - 使用批处理按名称匹配在文件夹之间移动文件
- javascript - 如何使用 React 访问嵌套的 Firebase 对象项
- python - 您可以使用他们的 API 将小工具添加到博客吗?
- reactjs - 如何使用 react-router-dom v6 构建 404 页面
- multithreading - Powershell 同步哈希表线程安全
- c - C 中的多线程 - 最终创建的线程超过其他线程的输出?