MySQL通过匹配第一个表中的行然后再匹配rest来排序

MySQL通过匹配第一个表中的行然后再匹配rest来排序,mysql,sql,Mysql,Sql,各位,我很难想出一个sql,它将为我提供以下输出: ID|CITY_SLUG|BAIRRO|NEIGHBORHOOD_BAIRRO|CIDADE|UF|STATE_SLUG 4444|4444|Porto Alegre do Norte 5671|5671|Porto Alegre do Piauí 7994|7994|Porto Alegre 9919|9919|Porto Alegre do Tocantins 12538|12538|Linha Porto Alegre 12538|125

各位,我很难想出一个sql,它将为我提供以下输出:

ID|CITY_SLUG|BAIRRO|NEIGHBORHOOD_BAIRRO|CIDADE|UF|STATE_SLUG
4444|4444|Porto Alegre do Norte
5671|5671|Porto Alegre do Piauí
7994|7994|Porto Alegre
9919|9919|Porto Alegre do Tocantins
12538|12538|Linha Porto Alegre
12538|12538|Centro|63310|Linha Porto Alegre|RS|rs
7994|7994|Aberta dos Morros|13460|Porto Alegre|RS|rs
4444|4444|Centro|38981|Porto Alegre do Norte|MT|mt
5671|5671|Centro|39387|Porto Alegre do Piauí|PI|pi
9919|9919|Setor Central|32994|Porto Alegre do Tocantins|TO|to
4444|4444|Centro|38981|Porto Alegre do Norte|MT|mt
5671|5671|Centro|39387|Porto Alegre do Piauí|PI|pi
7994|7994|Aberta dos Morros|13460|Porto Alegre|RS|rs
想法是首先列出城市,然后列出匹配城市名称的社区,这是我的sql:

Select 
CITY.ID, 
CITY.SLUG as CITY_SLUG,  
NEIGHBORHOOD.NAME as BAIRRO, 
NEIGHBORHOOD.SLUG AS NEIGHBORHOOD_BAIRRO, 
CITY.NAME as CIDADE,  
STATE.ABB AS UF,  
STATE.SLUG AS STATE_SLUG  
from CITY
LEFT OUTER join STATE on CITY.ID_STATE=STATE.ID
LEFT OUTER join NEIGHBORHOOD on NEIGHBORHOOD.ID_CITY = CITY.ID
WHERE (CITY.NAME LIKE '%PORTO ALE%' )

正如@Barmar所提到的,首先获取具有匹配城市名称的行,然后创建一个联合,其中的行具有匹配城市名称的邻域。添加相关逻辑以忽略具有空值的列:

Select 
CITY.ID, 
CITY.SLUG as CITY_SLUG,  
NEIGHBORHOOD.NAME as BAIRRO, 
NULL,
NULL,
NULL,
NULL
from CITY
LEFT OUTER join STATE on CITY.ID_STATE=STATE.ID
LEFT OUTER join NEIGHBORHOOD on NEIGHBORHOOD.ID_CITY = CITY.ID
WHERE (CITY.NAME LIKE '%PORTO ALE%' )
UNION
Select 
CITY.ID, 
CITY.SLUG as CITY_SLUG,  
NEIGHBORHOOD.NAME as BAIRRO, 
NEIGHBORHOOD.SLUG AS NEIGHBORHOOD_BAIRRO, 
CITY.NAME as CIDADE,  
STATE.ABB AS UF,  
STATE.SLUG AS STATE_SLUG  
from CITY
LEFT OUTER join STATE on CITY.ID_STATE=STATE.ID
LEFT OUTER join NEIGHBORHOOD on NEIGHBORHOOD.ID_CITY = CITY.ID
WHERE (CITY.NAME LIKE '%PORTO ALE%' )

我认为源表上需要一些上下文。
JOIN
将相关行合并到结果的同一行中。你想把街区分开排吗?您需要使用
UNION
将内容放在不同的行中。我对其进行了一些修改,以匹配实际列…谢谢