Sql 如何筛选包含两个include/contains的搜索查询?

Sql 如何筛选包含两个include/contains的搜索查询?,sql,postgresql,Sql,Postgresql,我可以用一个include/contains和一个id来限制它 explain SELECT "questions".* FROM "questions" INNER JOIN "taggings" ON "taggings"."question_id" = "questions"."id" INNER JOIN "tags" ON "tags"."id" = "taggings"."tag_id" WHERE ("tags"."name" IN ('Cats') AND "tags"."id"

我可以用一个include/contains和一个id来限制它

explain SELECT "questions".*
FROM "questions"
INNER JOIN "taggings" ON "taggings"."question_id" = "questions"."id"
INNER JOIN "tags" ON "tags"."id" = "taggings"."tag_id"
WHERE ("tags"."name" IN ('Cats') AND "tags"."id" = 1);
结果

查询计划 我可以使用相同的include语句限制它(其中cat两次)

结果

查询计划 当我尝试按两个包含进行筛选时,没有结果

explain SELECT "questions".* 
FROM "questions"
INNER JOIN "taggings" ON "taggings"."question_id" = "questions"."id"
INNER JOIN "tags" ON "tags"."id" = "taggings"."tag_id"
WHERE ("tags"."name" IN ('Cats')
AND "tags"."name" IN ('Dogs'));
结果

查询计划
如果您期望的是不同的东西,我假设您希望使用或不使用,并且:

...
WHERE tags.name IN ('Cats')
OR tags.name IN ('Dogs')
或者将两个列表合并为一个列表:

...
WHERE tags.name IN ('Cats', 'Dogs')

正如您所看到的,逻辑上不可能为真,因为两个列表中都没有值(集合的交集为空)。

如果您期望不同的内容,我假设您想使用或不使用,并且:

...
WHERE tags.name IN ('Cats')
OR tags.name IN ('Dogs')
或者将两个列表合并为一个列表:

...
WHERE tags.name IN ('Cats', 'Dogs')

正如您所看到的,逻辑上不可能为真,因为两个列表中都没有值(集合的交集为空)。

如果您期望不同的内容,我假设您想使用或不使用,并且:

...
WHERE tags.name IN ('Cats')
OR tags.name IN ('Dogs')
或者将两个列表合并为一个列表:

...
WHERE tags.name IN ('Cats', 'Dogs')

正如您所看到的,逻辑上不可能为真,因为两个列表中都没有值(集合的交集为空)。

如果您期望不同的内容,我假设您想使用或不使用,并且:

...
WHERE tags.name IN ('Cats')
OR tags.name IN ('Dogs')
或者将两个列表合并为一个列表:

...
WHERE tags.name IN ('Cats', 'Dogs')
如您所知,逻辑上不可能为真,因为两个列表中都没有值(集合的交集为空)。

这是一个非常糟糕的查询。以下是我想要的:

SELECT COUNT("questions"."id"), "questions"."title" FROM "questions"
INNER JOIN "taggings" ON "taggings"."question_id" = "questions"."id"
INNER JOIN "tags" ON "tags"."id" = "taggings"."tag_id"
WHERE ("tags"."name" IN ('Cats','Dogs'))
GROUP BY "questions"."id", "questions"."title"
HAVING COUNT("questions"."id") = 2;
这两个变量等于数组中的值数。

这是一个非常糟糕的查询。以下是我想要的:

SELECT COUNT("questions"."id"), "questions"."title" FROM "questions"
INNER JOIN "taggings" ON "taggings"."question_id" = "questions"."id"
INNER JOIN "tags" ON "tags"."id" = "taggings"."tag_id"
WHERE ("tags"."name" IN ('Cats','Dogs'))
GROUP BY "questions"."id", "questions"."title"
HAVING COUNT("questions"."id") = 2;
这两个变量等于数组中的值数。

这是一个非常糟糕的查询。以下是我想要的:

SELECT COUNT("questions"."id"), "questions"."title" FROM "questions"
INNER JOIN "taggings" ON "taggings"."question_id" = "questions"."id"
INNER JOIN "tags" ON "tags"."id" = "taggings"."tag_id"
WHERE ("tags"."name" IN ('Cats','Dogs'))
GROUP BY "questions"."id", "questions"."title"
HAVING COUNT("questions"."id") = 2;
这两个变量等于数组中的值数。

这是一个非常糟糕的查询。以下是我想要的:

SELECT COUNT("questions"."id"), "questions"."title" FROM "questions"
INNER JOIN "taggings" ON "taggings"."question_id" = "questions"."id"
INNER JOIN "tags" ON "tags"."id" = "taggings"."tag_id"
WHERE ("tags"."name" IN ('Cats','Dogs'))
GROUP BY "questions"."id", "questions"."title"
HAVING COUNT("questions"."id") = 2;

这两个变量等于数组中的值数。

您的问题是什么?说真的,这些引语真的有必要吗?你的问题是什么?说真的,这些引语真的有必要吗?你的问题是什么?说真的,这些引语真的有必要吗?你的问题是什么?说真的,所有这些引用真的有必要吗?