2012-04-23 45 views
2

基於不同的ID的表中的兩個值我有兩個表:如何獲得在同一SELECT

Users 
===================================== 
id, name, country_id, nationality_id 

Countries 
===================================== 
id, name, currency 

country_idnationality_id都使用ID從Countries表的。

country_idnationality_id不一定是相同的。

我想要得到的是一張表,其中給定國家中每個用戶的名字,其國家名稱nationality_id和他們使用的貨幣country_id

我的問題是如何做WHERE子句。這是我的,但它是不正確的,因爲貨幣回來nationality_id而不是country_id

希望是有道理....

SELECT 
    Users.name, 
    Countries.name, 
    Countries.currency 
FROM 
    Users, Countries 
WHERE 
    Users.nationality_id = Countries.id 
AND Countries.id = 6 

回答

5

訣竅是使用兩個地加入反對Countries不同alises,一個用於nationality_id,另一個用於COUNTRY_ID。

SELECT 
    Users.name, 
    /* name from the nationality_id join */ 
    cn.name, 
    /* currency from the country_id join */ 
    cc.currency 
FROM 
    Users 
     JOIN Countries cn ON Users.nationality_id = cn.id 
     JOIN Countries cc ON Users.country_id = cc.id 
WHERE 
    Users.country_id = 6 
3

您需要加入到countries表兩次 - 一次爲國籍,一次爲居民國家。要做到這一點,您需要使用別名,如下面的查詢所示。

SELECT 
users.*, 
nationality.name AS nationality, 
resident_country.currency 
FROM 
    users 
INNER JOIN 
    countries  AS nationality 
    ON users.nationality_id = nationality.id 
INNER JOIN 
    countries  AS resident_country 
    ON users.country_id  = resident_country.id 
WHERE 
    users.country_id = 6 

然後,您可以通過users表過濾所有內容。我通過常駐國家過濾,您可以使用users.nationality_id = 6或您喜歡的任何方式將其更改爲國籍。如果您需要按照countries表格的內容進行過濾,則可以過濾哪個別名是合適的。

(您不能引用使用countries.???countries,因爲它每次在查詢中使用時被賦予的別名)。

0
Select * from Users u 
left join Countries c 
on c.id = u.nationality_id 
where c.id = 6 
0

不知道你爲什麼會做的DAT作爲其2列使用相同的ID從不同的表 反正這是我該怎麼做 -

SELECT Users.name, nt.name, curr.currency FROM 
    Users 
     JOIN Countries nt ON Users.nationality_id = nt.id 
     JOIN Countries curr ON Users.country_id = curr.id 
    WHERE 
    Users.country_id = 6 
相關問題