我想搜索两个(或三个)表
表:人
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
所以我有以下问题:
我知道我可以通过JOIN搜索更多的桌子,但我现在不能让它工作。
答案 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 JOIN
与DISTINCT
一起使用。
SELECT DISTINCT p.*
FROM Persons p
JOIN data d ON p.id = d.person_id;
有关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;