如何根据同一SELECT中不同的id从表中获取两个值

时间:2012-04-23 13:32:18

标签: php mysql sql

我有两张桌子:

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

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

country_idnationality_id都使用Countries表中的id。

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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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.???,因为每次在查询中使用时都会为其指定别名。)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

不确定为什么你会做dat,因为有两列使用来自不同表的相同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
相关问题