2013-05-16 98 views
0

我有一個表items這是地圖上的點。他們有表item_stationsitem_id,station_id)中最近的地鐵站列表。這些電臺的名稱放置在表stationsidstation_name,station_direction,...)中。MySQL:我怎樣才能讓INNER與LEFT JOIN結果聯繫

所以我需要返回SQL查詢項目數據與最近的車站的名稱。

SELECT 
    i.id, i.title, i.description, 
    GROUP_CONCAT(s.station_id) as stations_ids, 
FROM items i 
    LEFT JOIN item_stations s ON s.item_id = s.id 
WHERE id = ? 
GROUP BY i.id 
LIMIT 1 

如何必須寫WITH表stationsINNER JOIN ON stations.id = s.station_id

+0

你怎麼知道它是否是最近的車站? –

+0

@JW웃這個邏輯是在添加到'item_stations'表之前的其他算法。所以我只需要連接這個表中的行就可以得到結果(從table'stations'獲取工作站名稱)。 – mikatakana

+1

您的查詢包含'SELECT'中未包含在'GROUP BY'子句中的非聚合字段。 MySQL允許這樣做,但它是非標準和混亂的語法。 – Matthew

回答

2

也許你想要這樣的東西?

SELECT 
    i.id, i.title, i.description, 
    GROUP_CONCAT(s.station_id) as stations_ids, 
    GROUP_CONCAT(stations.station_name) as stations_names 
FROM 
    items i 
LEFT JOIN 
    item_stations s ON s.item_id = s.id 
INNER JOIN stations on 
    stations.id = s.station_id 
WHERE i.id = ? 
GROUP BY i.id, i.title, i.description 
LIMIT 1 

我放置在塊,導致ID字段是2個表中 .ID - item_stations和項目。 MB是一個問題?

+1

'INNER JOIN'''LEFT JOIN'沒有意義......你可以在這個時候使用所有'INNER JOIN'。 – Matthew

+0

是的。我剛剛編輯過評論,但突然看到@Matthew的評論。 – Parandroid