2

私は2つのテーブルを持っています:

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

4 に答える 4

5

秘訣は、異なるアリスに対して 2 つの結合を使用することCountriesです。1 つは nationality_id 用で、もう 1 つは 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
于 2012-04-23T13:36:08.693 に答える
3

テーブルに 2 回参加する必要がありcountriesます。1 回は国籍について、もう 1 回は居住国についてです。そのために、以下のクエリのようにエイリアスを使用します。

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は、適切なエイリアスでフィルタリングします。

(クエリで使用されるたびにエイリアスが与えられているため、 countriesusing を参照することはできません。)countries.???

于 2012-04-23T13:36:12.280 に答える
0
Select * from Users u 
left join Countries c 
on c.id = u.nationality_id 
where c.id = 6
于 2012-04-23T13:36:40.687 に答える
0

とにかく、これは私がそれを行う方法です-

  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
于 2012-04-23T13:41:56.010 に答える