对不起,如果我的问题听起来有误导性,我不完全确定如何制定它。
请考虑以下表:具有ID和名称的Fruit,具有ID和名称的Person,以及具有Person_ID和Fruit_ID的Person_has_Fruit(多对多链接表)。
什么交易可以检索具有两个或更多特定水果的人?基本上我该如何与结果相交?
示例:
水果表
ID | Name
-----------------
1 | Apple
2 | Pineapple
3 | Banana
4 | Lemon
人员表
ID | Name
-----------------
1 | Tom
2 | Bill
3 | John
多对多的表
PersonID | FruitID
-----------------
3 | 1
1 | 2
3 | 2
2 | 3
3 | 3
当我要求有苹果,菠萝和香蕉的人时,我想要一个查询来找回约翰。有什么建议吗?
我已经尝试过选择*来自Person_has_Fruit,哪里有FruitID(' 1',' 2',' 3')&# 39;但这是不正确的,因为它检索所有具有其中一个的人ID,所以基本上它意味着值之间的关系。
答案 0 :(得分:1)
您希望在Fruit
表和Person
表的某些元组之间执行关系划分。
所以:
Select * From Person p
Where Not Exists ( Select * from Fruit f
Where (Name = 'Apple' Or Name = 'Pinneapple' or Name = 'Banana')
And Not Exists ( Select * from Person_has_Fruit pf
Where pf.PersonId = p.ID and pf.FruitId=f.ID))
答案 1 :(得分:0)
首先尝试创建视图。
CREATE VIEW fruitowners AS
( SELECT personfruit.personID, fruittable.id, persontable.person, fruittable.fruit
FROM persontable, fruittable, personfruit
WHERE personfruit.personID=persontable.id AND personfruit.fruitID=fruittable.id )
然后:
SELECT fruit FROM fruitowners
WHERE person='John'
返回John拥有的所有水果类型
和
SELECT person FROM fruitowners
WHERE fruit='Banana'
返回所有香蕉业主。
和
SELECT COUNT(*) FROM fruitowners WHERE person='John'
返回John拥有的水果数量
和
SELECT COUNT('fruit') FROM fruitowners WHERE person='John' and fruit='Banana'
返回John拥有多少香蕉