sql - SQL Server 2019:无法组合两个查询,当 1 解析字符串时
问题描述
有两个表(table1 和 table2)。
表 2 有一个名为的列TaskDescription
,其中包含一个嵌入了多个“标签”的字符串。我无法更改该数据的存储方式,因为它来自第三方。我可以取出taskID
我想从表 1 中获取所有信息,其中 table1.id = 上述查询的结果。我的问题是第一个查询返回超过 1 行,因此出现错误。
SELECT *
FROM table1
WHERE table1.id = (SELECT
CASE WHEN CHARINDEX(' ', a.em) <> 0
THEN SUBSTRING(a.em, 1, CHARINDEX('</taskID>', a.em) - 1)
ELSE a.em
END id
FROM
(SELECT
SUBSTRING(TaskDescription, CHARINDEX('<taskid>', TaskDescription) + 8, LEN(TaskDescription)) em
FROM table2
WHERE TaskDescription LIKE '%schemaupdate%') a
)
解决方案
当我们用于查找的限制查询的结果有超过 1 条记录,但我们想使用标量表达式(单值结果)时,我们有 4 个选项:
- 自行检查您的限制查询,它是否返回您期望的数据?
- 你期待一个结果吗?
- 如果查找中的所有值都相同,则
DISTINCT
可以令人满意,它的性能低于下一个选项,但它允许您稍后在查询返回不同的值时检测到错误。 - 如果你不关心具体的值,或者你知道它们总是相同的值并且你不需要验证它,你可以返回
TOP 1
.- 确保
ORDER BY
在使用时设置适当的TOP
- 确保
- 通过将 更改
=
为IN
运算符来更改要设置的查询
清楚的:
SELECT *
FROM table1
WHERE table1.id = (SELECT DISTINCT
CASE WHEN CHARINDEX(' ', a.em) <> 0
THEN SUBSTRING(a.em, 1, CHARINDEX('</taskID>', a.em) - 1)
ELSE a.em
END id
FROM
(SELECT
SUBSTRING(TaskDescription, CHARINDEX('<taskid>', TaskDescription) + 8, LEN(TaskDescription)) em
FROM table2
WHERE TaskDescription LIKE '%schemaupdate%') a
)
前1名:
SELECT *
FROM table1
WHERE table1.id = (SELECT TOP 1
CASE WHEN CHARINDEX(' ', a.em) <> 0
THEN SUBSTRING(a.em, 1, CHARINDEX('</taskID>', a.em) - 1)
ELSE a.em
END id
FROM
(SELECT
SUBSTRING(TaskDescription, CHARINDEX('<taskid>', TaskDescription) + 8, LEN(TaskDescription)) em
FROM table2
WHERE TaskDescription LIKE '%schemaupdate%') a
)
基于集合 (IN):
SELECT *
FROM table1
WHERE table1.id IN (SELECT
CASE WHEN CHARINDEX(' ', a.em) <> 0
THEN SUBSTRING(a.em, 1, CHARINDEX('</taskID>', a.em) - 1)
ELSE a.em
END id
FROM
(SELECT
SUBSTRING(TaskDescription, CHARINDEX('<taskid>', TaskDescription) + 8, LEN(TaskDescription)) em
FROM table2
WHERE TaskDescription LIKE '%schemaupdate%') a
)
推荐阅读
- c# - 在 SSIS 的同一工作簿中克隆 xlsx 工作表
- javascript - 升级 reactJS 后出现非法访问错误
- typescript - 为什么带有联合(字符串|数字)的TypeScript通用约束给出错误
- r - 如何从字符串中获取日期信息,然后通过测试按主题捕获最早的结果
- authentication - Google Chrome 扩展程序中的 Spotify 身份验证问题
- python - 有没有办法在 DataFrame 上插入/添加 NaN 行和列?
- angular - 测试 Jasmine 中的 HTML 元素
- reactjs - 我的减速器不断覆盖该值
- java - Grails Groovy 配置 Log4j
- gitlab - 在 gitlab runner 上共享 docker 容器内的卷