示例...
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 表的内容。
select *
from QryTable QT
where not exists (
select *
from CriterionTbl CT
where QT.CSV_Vals not like '%' + CT.CriterionVals + '%'
)