三级地区存放在一张表中,按照国家-省份-市级查出来

下面region为区域表,其中parentid为该区域的上级区域id,怎样写一条sql可以获取每个城市的信息,格式如:中国  安微省  广州市。


SELECT r2.`name` 'country', r1.`name` 'province', r.`name` 'city'
FROM `region` r
INNER JOIN `region` r1 ON r.parentid = r1.id
INNER JOIN `region` r2 ON r1.parentid = r2.id


SELECT r2.`name` 'country', r1.`name` 'province', r.`name` 'city'
FROM region r
INNER JOIN (


SELECT  id ,  `name`  ,  parentid
FROM  region
) r1   ON   r . parentid   =   r1 . id
INNER   JOIN   (

SELECT  id ,  `name` 
FROM  region
) r2   ON   r1 . parentid   =   r2 . id;

执行结果如下:


用LEFT JOIN如下:

SELECT r2.`name` '国家', r1.`name` '省级', r.`name` '市级'
FROM region r
LEFT JOIN (


SELECT  id ,  `name`  ,  parentid
FROM  region
) r1  ON  r . parentid  =  r1 . id
LEFT  JOIN  (

SELECT  id ,  `name`  ,  parentid
FROM  region
) r2  ON  r1 . parentid  =  r2 . id
WHERE  r . parentid  <>  ''
AND  r1 . parentid  <>  '';

下面member为会员表,其中country、province及city都是关联的区域表中的id,怎样用一条sql取出用户的信息,格式如:张三 中国  安微省 合肥市


SELECT m.`name` AS 'userName', r2.name AS 'country', r1.name AS 'province', r.name AS 'city'
FROM `member` m
INNER JOIN `region` r ON m.`city` = r.id
INNER JOIN `region` r1 ON m.`province` = r1.id
INNER JOIN `region` r2 ON m.`country` = r2.id


SELECT m.`name` AS 'userName', r2.name AS 'country', r1.name AS 'province', r.name AS 'city'
FROM `member` m
LEFT JOIN (

SELECT  id ,  name
FROM  `region`
) r   ON   m . `city`   =   r . id
LEFT   JOIN   (

SELECT  id ,  name
FROM  `region`
) r1   ON   m . `province`   =   r1 . id
LEFT   JOIN   (

SELECT  id ,  name
FROM  `region`
) r2   ON   m . `country`   =   r2 . id
执行效果如下:(用INNER JOIN、LEFT JOIN均可以)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值