2017-02-17 48 views
0

人々を休ま、私は次の出力を私に提供するSQLを考え出す苦労しています:MySQLのご注文は、

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%') 
+1

ソーステーブルのコンテキストが必要になると思います。 – Alfabravo

+1

'JOIN'は、結果の同じ行にある関連する行を結合します。あなたは別々の行に近隣をしたいですか?物事を異なる行に入れるには 'UNION'を使う必要があります。 – Barmar

答えて

0

@Barmarで述べたように、最初に一致した都市名を持つ行をフェッチして、一致した都市名に近所を持つ行でUNIONを作成します。 NULL値を持つ列を無視する関連するロジックを追加してください。

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%') 
+1

実際の列と一致するように少し修正しました...ありがとう –