Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql多子查询组\u concat查询_Mysql_Subquery_Group Concat - Fatal编程技术网

mysql多子查询组\u concat查询

mysql多子查询组\u concat查询,mysql,subquery,group-concat,Mysql,Subquery,Group Concat,我试图展示一个城市的行政区和邮政编码 我的数据库结构很好,有一个表,比如town、postcode和borough。此外,还为town_邮政编码和town_自治区的每个关系提供了表格 理想情况下,我希望返回的数据为: “艾比伍德”、“SE2”、“贝克斯利,格林威治” “巴比肯”、“EC1、EC2”、“伦敦城” 我尝试了一些不同的方法,我很接近,但还没有达到 任何帮助都将不胜感激……:) 到目前为止我已经试过了 SELECT DISTINCT t.town, GROUP_CONCAT( DIST

我试图展示一个城市的行政区和邮政编码

我的数据库结构很好,有一个表,比如town、postcode和borough。此外,还为town_邮政编码和town_自治区的每个关系提供了表格

理想情况下,我希望返回的数据为:

“艾比伍德”、“SE2”、“贝克斯利,格林威治” “巴比肯”、“EC1、EC2”、“伦敦城”

我尝试了一些不同的方法,我很接近,但还没有达到

任何帮助都将不胜感激……:) 到目前为止我已经试过了

SELECT DISTINCT t.town, 
GROUP_CONCAT( DISTINCT p.postcode SEPARATOR ', ' ) AS 'postcode', 
GROUP_CONCAT( DISTINCT b.borough SEPARATOR ', ' ) AS 'borough'
FROM coverage_towns AS t, 
coverage_boroughs AS b, 
coverage_postcodes AS p, 
coverage_towns_boroughs AS tb, 
coverage_towns_postcodes AS tp
WHERE t.id = tp.town_id
AND p.id = tp.postcode_id
AND b.id = tb.borough_id
GROUP BY t.town
ORDER BY t.town ASC
返回

"Abbey Wood", "SE2", "Southwark, Hammersmith and Fulham, Tower Hamlets, Wandsworth, Enfield, Newham, LOTS MORE HERE"
"Barbican", "EC1, EC2", "Brent, Greenwich, Kensington and Chelsea, Westminster, Camden, LOTS MORE HERE"
"Abbey Wood", "SE2", "Greenwich"
"Acton", "W3", "Greenwich"
"Aldersbrook", "E12", "Greenwich"
我也试过了

SELECT DISTINCT t.town, (

SELECT SQL_CACHE DISTINCT GROUP_CONCAT( p1.postcode
SEPARATOR ', ' )
FROM coverage_postcodes AS p1
WHERE p1.id = tp.postcode_id
) AS 'postcode', (

SELECT SQL_CACHE DISTINCT GROUP_CONCAT( b1.borough
SEPARATOR ', ' )
FROM coverage_boroughs AS b1
WHERE b1.id = tb.borough_id
) AS 'borough'
FROM coverage_towns AS t, coverage_boroughs AS b, coverage_postcodes AS p, coverage_towns_boroughs AS tb, coverage_towns_postcodes AS tp
WHERE t.id = tp.town_id
AND p.id = tp.postcode_id
AND b.id = tb.borough_id
GROUP BY t.town
ORDER BY t.town ASC
返回

"Abbey Wood", "SE2", "Southwark, Hammersmith and Fulham, Tower Hamlets, Wandsworth, Enfield, Newham, LOTS MORE HERE"
"Barbican", "EC1, EC2", "Brent, Greenwich, Kensington and Chelsea, Westminster, Camden, LOTS MORE HERE"
"Abbey Wood", "SE2", "Greenwich"
"Acton", "W3", "Greenwich"
"Aldersbrook", "E12", "Greenwich"

第一个查询看起来不错,只需在
组中添加
distinct
,如:

SELECT  t.town
,      GROUP_CONCAT(DISTINCT p.postcode SEPARATOR ', ' ) AS 'postcode'
,      GROUP_CONCAT(DISTINCT b.borough SEPARATOR ', ' ) AS 'borough'
<more code here>
GROUP BY
        t.town
选择t.town
,GROUP_CONCAT(不同的p.邮政编码分隔符“,”)作为“邮政编码”
,组_CONCAT(不同的b.borough分隔符“,”)为“borough”
分组
t、 城镇

解决方案

喝了一杯好咖啡后,我又回到问题上来,答案出现了

SELECT DISTINCT t.town, 
GROUP_CONCAT( DISTINCT p.postcode SEPARATOR ', ' ) AS 'postcode', 
GROUP_CONCAT( DISTINCT b.borough SEPARATOR ', ' ) AS 'borough'
FROM towns AS t, boroughs AS b, postcodes AS p, towns_boroughs AS tb, towns_postcodes AS tp
WHERE (t.id = tp.town_id AND t.id = tb.town_id)
AND (p.id = tp.postcode_id AND b.id = tb.borough_id)
GROUP BY t.town
ORDER BY t.town ASC

这当然是对第二栏的改进,但现在我找到了“阿比伍德”、“SE2”、“南华克、哈默史密斯和富勒姆、塔楼哈姆雷茨、旺兹沃斯、恩菲尔德、纽厄姆,这里还有更多”、“巴比肯”、“EC1、EC2”、“布伦特、格林威治、肯辛顿和切尔西、威斯敏斯特、卡姆登,这里还有更多”我要找的地方:“阿比伍德”、“SE2”,“Bexley,Greenwich”“Barbican”“EC1,EC2”“伦敦城”@user482957:您在
where
子句中缺少
tb
t
之间的链接