我有两张桌子:
Users
=====================================
id, name, country_id, nationality_id
Countries
=====================================
id, name, currency
country_id
和nationality_id
都使用Countries表中的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
答案 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