方法一:
SELECT store.store_name,
CONCAT(province,’ ‘,city,’ ',area
,store_code
) AS 地址
FROM store,provinces,areas,cities
WHERE cities.citycde=areas.cityCide AND provinces
.provinceid
=cities
.provinceCode
AND FIND_IN_SET(areas
.areaid
,store
.store_address
)
用concat来拼接字符,因为要查询店铺的省市区,所以相当于要查询四张表,然后进行表的关联,店铺下的地址是字符串之间使用了逗号隔开,在这个时候可以百度一下mysql函数中有没有分隔函数的方法,然后有一个find_in_set(查下的字符,是否存在跟查下相同的字符进行链接的字符串)查下结果一般不是返回null 就是返回记录没有相同字段的其他数据记录一个字符串列表就是一个由一些被’,’符号分开的子链接组成的字符串FIND_IN_SET(1,’2,3,7,5’)
find_in_set函数的语法:
FIND_IN_SET(str,strlist)
str 要查询的字符串
strlist 字段名 参数以”,”分隔 如 (1,2,6,8)
查询字段(strlist)中包含(str)的结果,返回结果为null或记录
假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。 一个字符串列表就是一个由一些被 ‘,’ 符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则FIND_IN_SET() 函数被优化,使用比特计算。 如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。
省市区,先观察表先这很重要,相当于先要把省市区表进行三者关联然后在把这三者中有一个能店铺进行关联,就是4个表都进行关联了,然后我们就要去区那么拿到市进行关联了,
cities.citycde=areas.cityCide,
之后就把市跟省链接provinces
.provinceid
=cities
.provinceCode
,这样三者就有联系了最后我们要把三者跟商店进行关联,一般我们住某个地方,会第一想到那个区,所有我们就要拿区去跟店铺的字符串列表进行关联,这样就相当于四个都进行关联了
SELECT store
.store_name
,
CONCAT(provinces
.province
,’ ‘,cities
.city
,’ ',areas
.area
,store
.store_code
)AS 地址
FROM store
,areas
ASareas
,cities
AScities
,provinces
AS provinces
WHERE cities
.citycde
=areas
.cityCide
AND provinces
.provinceid
=cities
.provinceCode
AND FIND_IN_SET(areas
.areaid
,store
.store_address
)
方法二:
Substring_index(“待截取有用部分的字符串”,”截取数据依据的字符”,截取字符的位置N)
这个不是完整的查询,只是查询一部分
查询语句如下:
SELECT CONCAT(areas
.area
,store
.store_code
) AS 地址
FROM store
,areas
WHERE areas.areaid= SUBSTRING_INDEX(store.store_address,’,’,-1)
运行的结果如下:
完整的查询语句:
SELECT store.store_name,
CONCAT(provinces.province,’ ‘,cities.city,’ ‘,areas.area
,store.store_code) AS 地址
FROM store,provinces,areas,cities
WHERE areas.areaid= SUBSTRING_INDEX(store.store_address,’,’,-1)
AND cities.citycde=areas.cityCide AND provinces.provinceid=cities.provinceCode
运行的结果如下:
方法三:
SELECT store.store_name,
CONCAT(province,’ ‘,city,’ ‘,area
,’ ',store_code) AS 地址
FROM areas
INNER JOIN cities
ON areas
.id
=cities
.id
INNER JOIN provinces
ON cities
.id
=provinces
.id
INNER JOIN store
ON provinces
.id
=store
.storeId
WHERE provinces
.provinceid
=cities
.provinceCode
AND cities.citycde=areas.cityCide
只能查询一条数据出来
运行结果如下: