日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 同一张表查询_mysql 同一张表查询 left join

發布時間:2025/3/19 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。