搜索MySQL中的两个或更多表?

时间:2013-09-18 04:07:49

标签: mysql sql join

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

表:人

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搜索更多的桌子,但我现在不能让它工作。

5 个答案:

答案 0 :(得分: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;

请参阅this SQLFiddle

有关JOIN的更多详细信息,请查看以下内容:A Visual Explanation of SQL Joins

答案 1 :(得分: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"

答案 2 :(得分: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

答案 3 :(得分: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 

答案 4 :(得分: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;