1

私はMySQLデータベースを持っており、その中に次のテーブルがありますmonkeys

id     name
1      Alice
2      Bill
3      Donkey Kong
4      Edna
5      Feefee

bananas私はまた、彼らが選ばれた場所の表を持っています。

id     where_from
1      USA
2      Botswana
3      Banana-land
4      USA

最後に、matchesどのバナナがどのサルに属しているかを説明する表があります。各サルはバナナを1つしか持てず、バナナを共有できるサルはいない。一部のサルはバナナが不足している可能性があります。

id     monkey_id     banana_id
1      3             4 
2      4             1
3      5             2

単一のSQLステートメントを使用してすべての一致を取得するにはどうすればよいですか?試合ごとに、サルの名前とバナナの産地が必要です。

私は次の3つのSQLステートメントを試しました。これらは機能します。

  1. SELECT * FROM matches
  2. SELECT * FROM monkeys WHERE id=[monkey_id from 1st SQL query]
  3. SELECT * FROM bananas WHERE id=[banana_id from 1st SQL query]

しかし、3つのSQLステートメントは面倒だと思います。単一のSQLステートメントを使用する方法についてのアイデアはありますか?私はSQLを学んでいて、基本をいじくり回しています。ありがとう!

4

1 に答える 1

3

一部のサルはバナナが不足している可能性があるため、LEFT JOINmatchesを意味しmonkeysます。これにより、にバナナがない場合でも、すべてのサルが確実にリストされmatchesます。

SELECT
  monkeys.name,
  bananas.where_from
FROM
  monkeys
  /* List all monkeys, even if they have no match */
  LEFT JOIN matches ON monkeys.id = matches.monkey_id
  /* And another LEFT JOIN to link matches to bananas */
  LEFT JOIN bananas ON bananas.id = matches.banana_id

これがSQLfiddle.comの例です

SQL結合について説明しているJeffAtwood(Stack Overflowの共同創設者)の優れた記事を読むことを強くお勧めします。

于 2012-11-25T21:52:03.297 に答える