从表中选择记录,结果与子查询中的所有条件匹配

问题描述 投票:0回答:1

示例...

Create Table QryTable (ID [int], Description [nvarchar](255), CSV_Vals [nvarchar](255))
insert into QryTable (
1, 'Description of record #1', 'val_1,val_2,val_3,val_4,val_5,val_6'
2, 'Description of record #2', 'val_1,val_3,val_6,val_9,val_10,val_11'
3, 'Description of record #3', 'val_2,val_3,val_4,val_15,val_20,val_21'
)

Create Table CriterionTbl (ID [int] identity (1,1), CriterionVals [nvarchar](50))
insert into CriterionTbl ( 'val_3', 'val_4')

功能类似于:

Select *
from QryTable
where CSV_vals like `AND (SELECT CriterionVals from CriterionTbl)`

结果与编写查询时相同,只是独立值是查询 CriterionVals 表的结果,并且仅返回包含 CriterionVals 表中列出的所有值的记录,而不是包含任何以下值的记录CriterionVals 表中的值:

Select *
from QryTable
where CSV_vals like '%val_3%'
and  CSV_vals like '%val_4%'

我可以使用以下查询来获取 CriterionTbl 中具有任何值的记录,但我需要编写一个查询,该查询返回具有 CriterionTbl 子查询中的所有条件的记录结果。

这就是我所拥有的返回包含 CriterionTbl 中任何内容的记录:

select *
from QryTable
Join (select * from CriterionTbl as CT)
on QryTable.CSV_Vals like '%' + CT.CriterionVals + '%'

这将返回:记录 1、2 和 3,因为 1、2 和 3 都有“val_3”或“val_4” 但我想要的只是记录1和3,因为只有1和3有'val_3'和'val_4'

但我需要从子查询中发生这种情况,以便结果基于 CriterionVals 表的内容。

sql sql-server subquery where-clause sql-server-2016
1个回答
0
投票
select *
from QryTable QT
where not exists (
    select *
    from CriterionTbl CT
    where QT.CSV_Vals not like '%' + CT.CriterionVals + '%'
)
© www.soinside.com 2019 - 2024. All rights reserved.