-2

我想搜索两个(或三个)表

表:人员

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 JOINDISTINCT.

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 
  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 回答
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 persons.name
from persons 
left join data on persons.id=data.person_id where 
data.item='hammer';

我怎样才能找到所有没有物品的人?

select persons.name
from persons 
left join data on persons.id=data.person_id where 
data.item is NULL;
于 2013-09-18T04:30:19.483 回答