在MySQL中搜索两个或多个表?

在MySQL中搜索两个或多个表?,mysql,sql,join,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\u id 因此,我有以下问题: 我怎样才能找到所有有

我想搜索两个(或三个)以上的表

表:人

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\u id

因此,我有以下问题:

  • 我怎样才能找到所有有锤子的人
  • 我怎样才能找到所有没有物品的人
  • 我怎样才能找到所有20岁和有锤子的人?(我想现在只需加上where‘和p.age=20’)
  • 如何找到所有拥有物品的人
我知道我可以用JOIN搜索更多的表,但我现在无法让它工作

我怎样才能找到所有有锤子的人

像这样使用
内部联接

SELECT p.* 
  FROM Persons p
  JOIN data d ON p.id = d.person_id
 WHERE d.item = 'hammer';
SELECT p.* 
  FROM Persons p
  LEFT JOIN data d ON p.id = d.person_id
 WHERE d.ID IS NULL;
我怎样才能找到所有没有物品的人

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;
像这样使用
LEFT JOIN

SELECT p.* 
  FROM Persons p
  JOIN data d ON p.id = d.person_id
 WHERE d.item = 'hammer';
SELECT p.* 
  FROM Persons p
  LEFT JOIN data d ON p.id = d.person_id
 WHERE d.ID IS NULL;
我怎样才能找到所有20岁和有锤子的人

正如您在第一个查询中已经提到的添加
和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;
如何找到所有拥有物品的人

将简单的
内部联接
不同
一起使用

SELECT DISTINCT p.*
  FROM Persons p
  JOIN data d ON p.id = d.person_id;
看见 有关
JOIN
的更多详细信息,请查看以下内容:

查找hammer

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

列出所有拥有锤子的人:

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 

最简单的方法是使用基本的左连接。 这些应该对你有帮助!谢谢你的提问

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

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;
我怎样才能找到所有没有物品的人

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;

我怎样才能找到所有没有物品的人?
我怎样才能找到所有没有物品的人?
?我没有错!更正为正确的问题,但我想我现在应该怎么做。。我希望如此!请不要在一个问题中问所有问题。相反,搜索重复项,如果找不到,请单独询问。请阅读有关SQL的基本教程。这将在很早的时候被讨论。从Persons p中选择DISTINCT p.*在p.id=d.Persons\u id上加入数据d;如果p.id的数据中有多行,那么每个p.id只能获得一行吗?@user2482699-这就是我使用
DISTINCT
的原因。看起来你还没有测试过任何查询。但我并没有用DISTINCT@user2482699-您的第一条评论是这样的:每个p.id是否可能只获得一行?现在你说的是相反的,但我得到的不仅仅是一个p.id和DISTINCT。你到底想要什么。请说得具体一点,清楚一点。现在我明白了。。我在查询时稍微更改了语法。。对不起,我错过了那个部分