-2

2 つ (または 3 つ) のテーブルを検索したい

表:人

id | name | age
1  | AA   | 20
2  | BB   | 30
3  | CC   | 40

表:データ

id | person_id | item
1  | 2         | nail
2  | 2         | hammer
3  | 1         | hammer
4  | 2         | hat

person.id は data.person_id です

だから私は次の質問があります:

  • ハンマーを持っている人をすべて見つけるにはどうすればよいですか?
  • アイテムを持っていないすべての人を見つけるにはどうすればよいですか?
  • 20 歳でハンマーを持っている人をすべて見つけるにはどうすればよいですか? (「AND p.age = 20」に追加するだけです)
  • アイテムを持っているすべての人を見つけるにはどうすればよいですか?

JOIN を使用してより多くのテーブルを検索できることはわかっていますが、今は機能しません。

4

5 に答える 5

1

ハンマーを持っている人をすべて見つけるにはどうすればよいですか?

INNER JOIN次のように使用します。

SELECT p.* 
  FROM Persons p
  JOIN data d ON p.id = d.person_id
 WHERE d.item = 'hammer';

アイテムを持っていないすべての人を見つけるにはどうすればよいですか?

LEFT JOIN次のように使用します。

SELECT p.* 
  FROM Persons p
  LEFT JOIN data d ON p.id = d.person_id
 WHERE d.ID IS NULL;

20 歳でハンマーを持っている人をすべて見つけるにはどうすればよいですか?

AND p.age = 20すでに述べたように、最初のクエリに追加します。

SELECT p.* 
  FROM Persons p
  JOIN data d ON p.id = d.person_id
 WHERE d.item = 'hammer'
   AND p.age = 20;

アイテムを持っているすべての人を見つけるにはどうすればよいですか?

とシンプルINNER JOINに使いDISTINCTます。

SELECT DISTINCT p.*
  FROM Persons p
  JOIN data d ON p.id = d.person_id;

このSQLFiddleを参照してください

詳細についてJOINは、これを見てください: SQL 結合の視覚的な説明

于 2013-09-18T04:10:51.367 に答える
0

ハンマーを持っているすべての人をリストします。

SELECT A.name FROM persons A
JOIN data B ON B.person_id=A.id 
WHERE B.item='hammer'

アイテムのないすべての人をリストします :

SELECT A.name FROM persons A
JOIN data B ON B.person_id!=A.id 
于 2013-09-18T04:18:23.663 に答える
0
SELECT 
  p.name from persons AS p 
LEFT OUTER JOIN 
  data AS d 
ON d.person_id = p.id 
WHERE d.item LIKE "hammer"
于 2013-09-18T04:13:59.130 に答える
0

ハンマーを探す

SELECT p.person_name FROM persons as p
INNER JOIN data AS d
ON d.person_id=p.person_id
WHERE d.item='hammer'

アイテムを持っていない人を探す

SELECT p.person_name FROM persons as p
INNER JOIN data AS d
ON d.person_id=p.person_id
WHERE d.item is null
于 2013-09-18T04:14:00.173 に答える