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


How to get two values from table based on different id's in same SELECT

我有两个表:

Users
=====================================
id, name, country_id, nationality_id
Countries
=====================================
id, name, currency

country_idnationality_id都使用"国家/地区"表中的 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
诀窍

是使用两个连接来对抗具有不同别名的Countries,一个用于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
您需要

加入两次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,因为每次在查询中使用时都会为其指定别名。

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

不确定为什么要做 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