因此,我正在try 使用SEDE从令人困惑的Stack Exchange中获取包含两个单独标签(但不一定都有)的问题表,以找到我可能能够解决的谜题.在我设法修复了前面的代码之后,我能够包括我试图将问题列表限制到的另一个标记.

然而,我很难编写代码,这样我就可以检索所有只有一个或两个标签的问题.相反,我只能检索两者都有的问题.

Here是我设法想出的代码(在阅读了更多教程之后):

SELECT p.Title, p.Id, p.Score, p.ViewCount, u.DisplayName, p.Tags
FROM Posts p
JOIN Users u ON p.OwnerUserId = u.Id
INNER JOIN PostTags pt ON p.Id=p.PostId
INNER JOIN Tags t ON t.id = pt.TagId
INNER JOIN PostTags pt1 ON p.Id=pt1.PostId
INNER JOIN Tags t1 ON t1.Id = pt1.TagId
WHERE p.PostId=1
AND (t.TagName=##tagName:string?logical-deduction##)
AND (t1.TagName=##tagName:string?grid-deduction##)
AND p.Score <=10
AND p.Score >=0
AND p.AcceptedAnswerId is null
ORDER BY p.Score DESC

它似乎只返回包含两个标记(以及它们拥有的任何其他标记)的问题,同时也遵守其他限制.

我的问题是:为什么它只返回两个标记都有的问题,以及如何才能使查询也返回只有以下一个标记的问题?

推荐答案

以下是我个人解决这个问题的方法:

SELECT p.Title, p.Id, p.Score, p.ViewCount, u.DisplayName, p.Tags
FROM Posts p
JOIN Users u ON p.OwnerUserId = u.Id
INNER JOIN PostTags pt ON p.Id=pt.PostId
INNER JOIN Tags t ON t.id = pt.TagId
WHERE p.PostTypeId=1
--AND (p.Tags LIKE '%logical-deduction%' OR p.Tags LIKE '%grid-deduction%')
AND (t.TagName=##tagName:string?logical-deduction## OR t.TagName=##tagName:string?grid-deduction##)
AND p.Score <=10
AND p.Score >=0
AND p.AcceptedAnswerId is null
ORDER BY p.Score DESC

注意到不同之处:删除了重复连接t1 pt1,这导致您的查询不能按预期工作.我添加了对p.Tags的搜索,因此,如果将来您想要取消强制t.TagNamegrid-deductionlogical-deduction,您可以注释掉那一行,取消注释掉另一行,这样就只剩下p.Tags被搜索了.这将导致查询不关心主标记,而只关心附加标记.

如果要返回ONLY个具有网格或逻辑(但不是两者都有)的值,可以使用以下WHERE子句:

AND (
    (p.Tags LIKE '%logical-deduction%' AND p.Tags NOT LIKE '%grid-deduction%') OR
    (p.Tags LIKE '%grid-deduction%' AND p.Tags NOT LIKE '%logical-deduction%')
)

Sql相关问答推荐

在postgresql中使用来自另一个字段的日期名称作为JSONB查询中的关键字

Postgresql -如何计算刷卡和刷卡时间

JSON列之间的Postgr聚合

如何优化我的功能以减少花费的时间?

MariaDB查询在逗号分隔的字符串中查找多个值

如何在PostgreSQL中对第1,1,1,1,2,2,2,2行进行编号

如何嵌套两条SQL语句

SQL:如何查找聚合满足条件的连续日期

ColdFusion+Docker:未安装SQLSERVER包

此过程如何在不引用传递的参数值的情况下执行工作?

删除所有订单中可用的重复值

如何使用Clickhouse的COUNT聚合返回所有列,但GROUP BY是这些列的子集

在 SQL Server 中合并两个 XML 列

Postgresql 生成器列导致语法错误

根据行号将列转置为没有任何id或键列的行

将有效数字作为 varchar 返回的 SQL 函数

如何根据 Amazon Athena 中的多个列值删除重复行?

删除具有相同 ID 的重复记录 - Postgresql

REGEXP 用于字符串格式化以对用空格分隔的字符和数字进行分组

在 SQL 中将行显示为列