有没有办法编写一个参数化SQL查询,该查询匹配链接到多个项目的注释,而不使用 HAVING ?
假设我有一个“notes”表,一个“projects”表和一个将这两者连接在一起的“notes_projects”表。我想在 IN 子句中找到与所有项目ID相关联的注释。这是 HAVING :
的版本SELECT notes.*, COUNT(np.project_id) AS np_count
FROM notes
INNER JOIN notes_projects AS np
ON np.note_id = notes.id
WHERE np.project_id IN (?)
GROUP BY notes.id
HAVING np_count = 2;
有没有办法不使用 HAVING 子句,或者这是处理此类案件的正确方法吗?
答案 0 :(得分:0)
不要加入链接表,因为这会更改行数。使用EXISTS
:
SELECT *
FROM notes n
WHERE EXISTS (
SELECT *
FROM notes_projects AS np
WHERE np.note_id = notes.id AND np.project_id IN (?)
)
(您的查询中的分组就是为了解决连接引起的问题。)
这是一个需要找到所有项目的版本:
SELECT *
FROM notes n
WHERE NOT EXISTS (
SELECT *
FROM notes_projects AS np
WHERE np.note_id = notes.id AND np.project_id NOT IN (?)
)