mysql 同一张表查询_mysql 同一张表查询 left join
今天群里有同學發了一個題:
一張表,如圖
需要寫一個sql ,輸出如下結果
對這個表進行一下簡單解釋,其實就是省市區的關系,放在了同一張表中,level=1表示省, level=2表示市,level=3表示區
code是他們進行關系的一種表現。
就利用code做文章
sql如下:
SELECT IF(t.name=t1.name,t.name,IF(t1.name=t2.name,CONCAT(t.name,"-",t1.name),CONCAT(t.name,"-",t1.name,"-",t2.name))) FROM Test t LEFT JOIN Test t1 ON ((t1.code-t.code)<=9000 AND (t1.code-t.code)>=1000 AND (t1.code-t.code)%1000=0) OR t1.code-t.code=0 LEFT JOIN Test t2 ON ((t2.code-t1.code)<1000 AND (t2.code-t1.code)>0) OR t2.code-t1.code=0 WHERE t.level=1
這個sql肯定需要left join 連表,因為需要3個字段,所以連3次表,利用好code直接的關系,但是不要忘記code相等的情況
code間的關系,是省市的前綴是一樣的,市區的前綴是一樣的,隸屬關系就這樣判斷:
省市:(t1.code-t.code)<=9000 AND (t1.code-t.code)>=1000 AND (t1.code-t.code)%1000=0
市區:(t2.code-t1.code)<1000 AND (t2.code-t1.code)>0
首先我先寫了這樣的sql:
SELECT t.name,t1.name,t2.name FROM Test t LEFT JOIN Test t1 ON ((t1.code-t.code)<=9000 AND (t1.code-t.code)>=1000 AND (t1.code-t.code)%1000=0) OR t1.code-t.code=0 LEFT JOIN Test t2 ON ((t2.code-t1.code)<1000 AND (t2.code-t1.code)>0) OR t2.code-t1.code=0 WHERE t.level=1
結果如圖:
看到這個結果,只需要在select 中使用IF函數進行判斷了,結果就出來了
總結
以上是生活随笔為你收集整理的mysql 同一张表查询_mysql 同一张表查询 left join的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL数据库的总结_MySQL数据库
- 下一篇: mysql 将三个月的数据导到历史表_迁