Sqlite 如何从嵌套select中指定至少有x个值的where子句
假设我有这些表: 人 最喜欢的食物 我想得到一份名单,列出至少喜欢第五个人喜欢的食物的人的名字。如下所示:Sqlite 如何从嵌套select中指定至少有x个值的where子句,sqlite,relational-division,Sqlite,Relational Division,假设我有这些表: 人 最喜欢的食物 我想得到一份名单,列出至少喜欢第五个人喜欢的食物的人的名字。如下所示: SELECT p.name FROM person p LEFT JOIN favourite_food ff ON ff.personid = p.id WHERE ff.food = (SELECT food FROM favourite_food WHERE personid = 5) AND ff.personid <> 5; 但我不知道如何指定“至少”部分。我必须创
SELECT p.name FROM person p
LEFT JOIN favourite_food ff ON ff.personid = p.id
WHERE ff.food = (SELECT food FROM favourite_food WHERE personid = 5)
AND ff.personid <> 5;
但我不知道如何指定“至少”部分。我必须创建一个临时表吗?SQL基本上是与集合一起工作的,因此它通常有助于严格按照集合论重新构造问题 至少可以这样重新制定: 如果我们只看第五个人最喜欢的食物,哪些人的最喜欢食物的数量与第五个人相同
SELECT name
FROM person
WHERE id IN (SELECT personid
FROM favourite_food
WHERE food IN (SELECT food
FROM favourite_food
WHERE personid = 5)
GROUP BY personid
HAVING COUNT(food) = (SELECT COUNT(food)
FROM favourite_food
WHERE personid = 5)
)
或者,使用以下重新表述:
我们不想要那些不喜欢第五个人喜欢的食物的人。
因此,找出不存在第5人喜欢但该人不喜欢的食物的所有人:
SELECT name
FROM person
WHERE NOT EXISTS (SELECT 1
FROM favourite_food AS person5_food
WHERE personid = 5
AND NOT EXISTS (SELECT 1
FROM favourite_food
WHERE personid = person.id
AND food = person5_food.food)
)
实际上,SQL是基于的,您需要的操作称为除法
SELECT name
FROM person
WHERE id IN (SELECT personid
FROM favourite_food
WHERE food IN (SELECT food
FROM favourite_food
WHERE personid = 5)
GROUP BY personid
HAVING COUNT(food) = (SELECT COUNT(food)
FROM favourite_food
WHERE personid = 5)
)
SELECT name
FROM person
WHERE NOT EXISTS (SELECT 1
FROM favourite_food AS person5_food
WHERE personid = 5
AND NOT EXISTS (SELECT 1
FROM favourite_food
WHERE personid = person.id
AND food = person5_food.food)
)