【发布时间】:2021-02-23 08:04:19
【问题描述】:
对于上下文,这是一个可由最终用户调用的搜索,他们将提供逗号分隔的字符串,其中包含要搜索的表 3 ID 和要搜索的表 2 文本值。
我想执行一个选择查询,它只返回来自 CTE 的匹配结果,其中 fieldValuePairTable 中的所有值都匹配。目前它返回任何匹配项。
DECLARE @fieldvaluepairtable TABLE (Table3Id int, value varchar(max));
INSERT INTO @fieldvaluepairtable SELECT * FROM dbo.split_string_XML('123:york,456:halifax',',');
with cte as (
select Table1.id, Table3.id as t3id, Table2.text
from Table1
inner join Table2 on Table1.id = Table2.Table1Id
inner join Table3 on Table2.id = Table3.Table2Id)
select distinct id
from cte
join @fieldvaluepairtable DataTable on (text like cast( '%' + DataTable.value + '%' as varchar ) and t3id = DataTable.Table3Id)
例如;
CTE 的可能结果集如下所示:
id t3id text
---- ----- ---------------
100 123 york
100 456 halifax
200 123 york
200 456 manchester
select 语句然后会返回
id
----
100
200
我想选择字段值对表中的所有值都匹配的 ID,而不是任何匹配的 ID。 意思是我想看到以下结果
id
----
100
代码将在存储过程中使用,因此它需要能够处理传递到 fieldvaluepairtable 的任意数量的键值对
【问题讨论】:
-
旁注,我真的建议用表格类型参数替换那个分隔的分隔(是的,我的意思是双倍)值。
-
样本数据和期望的结果会让这一点更清楚。
标签: sql sql-server count ssms inner-join