我有两个表:
Users
=====================================
id, name, country_id, nationality_id
Countries
=====================================
id, name, currency
country_id
和nationality_id
都使用"国家/地区"表中的 ID。
country_id
和nationality_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