开发做了好几年但sql 一直很弱,复杂的sql 没怎么写过。其实是因为不会写。故事是这样的,一个业务逻辑 比较复杂,用Java处理三四十行代码。而且很蹩脚。领导看了说直接写sql 。。。。特此记录下。。权当笔记了 不喜勿喷
首先说下:
1:GROUP_CONCAT() 他的作用是 将一对多的变体 ,按照你指定的 规则 整合为一个字段。 参数 SEPARATOR 关键字 用来指定分隔符 。
2:嵌套查询,最外层的 select 会把次外层的结果结作为查询结果集 再次进行筛选。
3:利用分组 将重复的字段 合并。
以下是搞出来的SQL 记录下权当笔记:
SELECT p.cname,GROUP_CONCAT(p.hname,p.t1) hant1 FROM (
SELECT o.cname,o.hname,GROUP_CONCAT(o.alevel SEPARATOR ' ') AS t1FROM
(
SELECT X.NAME AS cname,Y.NAME AS hname,z.hallarealevel AS alevel
FROM
`CEC_Cinema` X
LEFT JOIN CEC_Hall Y ON X.id = Y.cinemaId
LEFT JOIN CEC_HallArea z ON z.hallid = Y.id
LEFT JOIN CEC_ChannelSettings_HallArea m ON m.hallAreaId = z.id
WHERE
m.`settingsId` = '98a4da75-db9a-4b08-9afe-8d2fbf127e7f'
) o GROUP BY o.cname,o.hname
) AS p GROUP BY p.cname;