如何更改此sql查询
我必须更改上面的查询以执行如下结果如何更改此sql查询,sql,sql-server,Sql,Sql Server,我必须更改上面的查询以执行如下结果 SELECT * FROM dbo.tbh_table WHERE TopicID IN ( SELECT value FROM dbo.fn_split('19,',') ) 我的topicID值如下15,19,12,1 但是split会给出15 19 12 1的值。因此,我无法执行查询 任何指导都会有所帮助您可以将ID添加到表变量中,然后与表变量联接,以确定表变量中是否包含TopicID SELECT * FROM dbo.tbh_tab
SELECT *
FROM dbo.tbh_table
WHERE TopicID IN (
SELECT value
FROM dbo.fn_split('19,',')
)
我的topicID值如下15,19,12,1
但是split会给出15 19 12 1的值。因此,我无法执行查询
任何指导都会有所帮助您可以将ID添加到表变量中,然后与表变量联接,以确定表变量中是否包含TopicID
SELECT *
FROM dbo.tbh_table
WHERE TopicID LIKE '%19,%'
假设
fn\u split
是一个表值函数(TVF
),返回一个表(值INT)
,使用以下方法:
DECLARE @DesiredIDs TABLE (
DesiredID INT
)
INSERT INTO @DesiredIDs (DesiredID) Values (15)
INSERT INTO @DesiredIDs (DesiredID) Values (19)
INSERT INTO @DesiredIDs (DesiredID) Values (12)
INSERT INTO @DesiredIDs (DesiredID) Values (1)
select * from tbh_table t
left join @DesiredIDs d on d.DesiredID = t.TopicID
where d.DesiredID is not null
如果我没弄错你的问题,你想要这样的东西:
SELECT t.*
FROM dbo.tbh_table t
CROSS APPLY
dbo.fn_split(TopicID) split
WHERE split.value = 19
你拥有这个数据库吗?也许现在正是将其正常化并在dbo.tbh_表和Topic表之间建立链接的好时机。这样你就可以使用集合论了。正在讨论的列(dbo.tbh_table.TopicID)是一个VARCHAR吗?上面有一个相关的(但不是重复的)问题。我不知道交叉申请。这是一个特定于sqlserver的问题,对吗?如果我读对了这个问题,他的问题不是“如何匹配15或19或12或1”,而是“如果我有一个表函数来分隔字符串,如何将19匹配到一个topicId逗号分隔的字符串”。所以你的解决方案不起作用。另外,不需要DesiredDS表正是IN子句发明的目的。
SELECT *
FROM dbo.tbh_table
WHERE 19 IN (
SELECT value
FROM dbo.fn_split(TopicId,',')
)