SQL:来自数组

时间:2017-09-26 09:53:31

标签: sql conditional-statements

我能描述问题的最好方法是给你一个问题的例子:

我有一张名为" person "列id | name | hobbys

hobbys将是 manyToMany 关联

所以我有这样的陈述:SELECT * FROM person p LEFT JOIN hobbys h ON p.hobby_id = h.id WHERE p.hobby_id IN($array);

这里的问题是,它会选择所有拥有该阵列中某个爱好者的人,但我希望所选人必须拥有该阵列中的所有爱好。 sql中有函数吗?

2 个答案:

答案 0 :(得分:0)

使用GROUP BYHAVING

SELECT p.id, p.name 
FROM person p 
JOIN hobbys h ON p.hobby_id = h.id 
WHERE p.hobby_id IN($array)
GROUP BY p.id, p.name
HAVING count(distinct h.id) = <size_of_array>

还有其他使用INTERSECTIONINEXISTS的解决方案,但是这个解决方案会将值列表保留在IN之后。

答案 1 :(得分:0)

您必须亲自搜索每个项目的爱好,并将其与爱好表中的所有内容的AND连接相匹配

首先,你必须得到所有人的爱好记录

SELECT * FROM person p LEFT JOIN hobbys h ON p.hobby_id = h.id 

现在构建AND条件语句,稍后使用

进行查询
SELECT * FROM person p LEFT JOIN hobbys h ON p.hobby_id = h.id 
WHERE first_result IN($array) and second_result in ($array) and....;