我能描述问题的最好方法是给你一个问题的例子:
我有一张名为" 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中有函数吗?
答案 0 :(得分:0)
使用GROUP BY
和HAVING
。
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>
还有其他使用INTERSECTION
,IN
或EXISTS
的解决方案,但是这个解决方案会将值列表保留在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....;