帮助SQLITE查询

时间:2011-07-13 03:53:37

标签: sql sqlite

我有三个表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 个答案:

答案 0 :(得分:2)

使用:

  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参数的数量,否则您可能会看到误报(标记1的IE重复数将计为2等)。