Помогите с запросом SQLITE - PullRequest
1 голос
/ 13 июля 2011

У меня есть три таблицы Task и TaskTag и Tag, как показано ниже.

CREATE TABLE Task (task_id text PRIMARY KEY, subject text);
CREATE TABLE TaskTag (task_tag_id text PRIMARY KEY, task_id text, tag_id text);
CREATE TABLE Tag (tag_id text PRIMARY KEY, tag text);

Я хочу найти запись в Task, где есть два совпадающих тега: tag1, tag2

Как бы выглядел SQL, я пытался, но я не могу заставить это работать, используя AND, но могу использовать OR ..

SELECT * 
  FROM Task 
  JOIN TaskTag ON Task.task_id = TaskTag.task_id 
  JOIN Tag ON TaskTag.tag_id = Tag.tag_id 
 WHERE tag = "tag1" 
   AND tag = "tag2"

1 Ответ

2 голосов
/ 13 июля 2011

Использование:

  SELECT * 
    FROM Task 
    JOIN TaskTag ON Task.task_id = TaskTag.task_id 
    JOIN Tag ON TaskTag.tag_id = Tag.tag_id 
   WHERE tag IN ('tag1', 'tag2')
GROUP BY Task.task_id
  HAVING COUNT(DISTINCT tag) = 2

HAVING COUNT(DISTINCT ...) должно равняться количеству IN параметров, иначе вы рискуете увидеть ложные срабатывания (IE дубликатов tag1 будет считаться как 2 и т. Д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...