【问题标题】:Dynamic values in where clausewhere 子句中的动态值
【发布时间】:2021-10-20 17:42:49
【问题描述】:

我正在尝试从表中逐行读取并将值传递给查询条件。我无法继续进行。我必须使用计数器/迭代还是有任何选项。非常感谢任何帮助

我想将值传递给像条件这样的值

create table #temp 
(
     userid int,
     typeid int
)

insert into #temp values (1, 101)
insert into #temp values (1, 221)
insert into #temp values (3, 401)
insert into #temp values (4, 501)
    
create table #target
(
     userid int,
     roleid int,
     value varchar(max)
)
    
insert into #target values (1, 000, 'something here userid:1 typeid:101 something here')
insert into #target values (1, 001, 'something here userid:1 typeid:221 something here')
insert into #target values (1, 001, 'something here userid:1 typeid:331 something here')
insert into #target values (3, 002, 'something here userid:3 typeid:401 something here')
    
    
select t.userid, d.roleid, t.typeid
from #target d
inner join #temp t on t.userid = d.userid
                   and value like '%userid:'t.userid' typeid:'t.typeid'%'

这是我得到的结果:

userid roleid typeid
1 000 101
1 001 221
3 002 401

【问题讨论】:

  • @DaleK 我的道歉在条件中添加了 ON 并修改了问题以明确。非常感谢任何帮助
  • and value like '%userid:'t.userid' typeid:'t.typeid'%' 也不是有价值的 SQL 吗?
  • @DaleK 我需要关于如何更改查询或必须更改整个方法的帮助
  • @DaleK 我在结果中需要角色 ID、用户 ID、类型 ID。这是问题中的最后一个查询

标签: sql sql-server tsql dynamic where-clause


【解决方案1】:

看来你只需要熟悉一下string concatenation operator

select t.userid, roleid, typeid
  -- How to debug such a query
  --, [value]
  --,'%userid:' + convert(varchar(32),t.userid) + ' typeid:' + convert(varchar(32),t.typeid) + '%'
  --, case when d.[value] like '%userid:' + convert(varchar(32),t.userid) + ' typeid:' + convert(varchar(32),t.typeid) + '%' then 1 else 0 end
from #target d
inner join #temp t on t.userid = d.userid
  and d.[value] like '%userid:' + convert(varchar(32),t.userid) + ' typeid:' + convert(varchar(32),t.typeid) + '%'

返回

userid roleid typeid
1 0 101
1 1 221
3 2 401

【讨论】:

    猜你喜欢
    • 2017-08-26
    • 2012-03-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    相关资源
    最近更新 更多