2

有没有办法在不使用HAVING的情况下编写与链接到多个项目的注释匹配的参数化 SQL 查询?

SQLfiddle

假设我有一个“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子句,或者这是处理这种情况的正确方法?

4

1 回答 1

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 (?)
)
于 2013-08-14T15:27:14.680 回答