2016-05-16 52 views
1

我有一個儲存國家,省市的表格位置。 我想通過它的id搜索一個城市;我也能看到它的省份和國家!我嘗試了太多,但我真的不知道我需要寫什麼確切的查詢。如何在MySQL中一起連接三個表?

我的表名的位置,這些都是我的領域與示例數據:

id    enName   localName type  in_location 
1    Iran    ایران country   0 
2    Fars    فارس  province   1 
3    shiraz   شیراز  city    2 
4    marvdasht  مرو دشت city   2 

我想,當我搜索ID = 3得到這個結果:

國家/省/市

伊朗/法爾斯/西拉

我怎麼能寫e這個查詢?我知道我必須加入桌子3次,但不知道到底是怎麼做的。

我曾嘗試代碼:

SELECT 
    in_location , 
    enName 
FROM 
    location 
WHERE 
    id = 12321 as a 
INNER JOIN 
    SELECT 
     * 
    FROM 
     `fzxit_location` as b 
    on a.in_location = b.id 
+1

MySQL不具有任何功能做分層查詢。但是,如果預定義層次結構級別,則可以實現此目的。更簡單的方法是在PHP上編寫遞歸函數以實現您正在嘗試的操作。 –

+1

您的查詢失敗了關係數據庫的用途,同一個表中的行不應直接相關。 – zoubida13

+0

你爲什麼想要內連接同一張表? – NuttLoose

回答

3

WHERE statment應該總是在最後。我認爲這是你想要的。儘管如此,你將被固定爲與3個或更少的孩子建立關係。

SELECT a.enName, b.enName, c.enName FROM location as a 
LEFT JOIN location as b ON a.in_location = b.id 
LEFT JOIN location as c ON b.in_location = c.id 
WHERE a.id = 3 
+0

你是30秒更快:) – smozgur

+0

謝謝你弗雷德里科,正是我想:))) – Saeid

0

此搜索需要幫助!

select from p.province_name, 
      ct.country_name, 
      c.city_name 
from city as c 
    INNER JOIN provinces as p ON c.province_id=p.province_id 
    INNER JOIN countries as ct ON c.country_id = ct.country_id 
where c.city_id = "requested value"; 
+0

當爲了可讀性好縮進,你的錯誤變得非常明顯 – RiggsFolly

1

雖然你沒有指定其他表名,你可以試試這個..

select a.countryName, 
     b.proviceName, 
     c.cityName 
from ((country a 
     left join province b on a.countryId = b.countryId) 
     left join city c on a.countryId = c.countryId) 
where id = 3;