基于在另一个表中的多个属性查找从表中查找实体
本文关键字:查找 属性 实体 另一个 | 更新日期: 2023-09-27 18:16:00
我有两个表,定义如下:
- 表1 -人员
- 表2 -查找
-----------------------------------------------
Id | Name | Age | Gender | Address | Nationality
------------------------------------------------
1 | Ram | 30 | Male | Hyderabad| Indian <br/>
2 | Raj | 30 | Male | Delhi | Indian <br/>
查找
------------------------------------------
LookupId | Key | Value
------------------------------------------
1 | Age | 30
2 | Gender | Male
3 | Address | Chennai
4 | Nationality | Indian
5 | Age | 24
6 | Gender | Male
7 | Address | Hyderabad
8 | Nationality | Indian
9 | Age | 30
10 | Gender | Male
11 | Address | Delhi
12 | Nationality | Indian
13 | Age | 34
14 | Gender | Female
15 | Address | Mumbai
16 | Nationality | Indian
根据上述数据,当用户可以选择多个查找时,从Persons表中获取Person信息的建议或最佳方法是什么?
例如:
对于lookupid 1,2,8,应该返回person id 1和person id 2。
对于lookupid 1,2,7,8,则返回Id 1。
对于lookupid 5,6,7,8,将不返回任何记录,以此类推。
您可以使用下面的查询基于所选的值构建动态sql语句。该查询将为您提供必须针对persons表
运行的实际查询。WITH STMT
AS
(
select id,
REPLACE(stuff((
select ';'+ key + '='''+value+''''
from lookups
WHERE ID IN (1,2,7,8)
for xml path('')
),1,1,''),';',' AND ') COND
from lookups
WHERE ID IN (1,2,7,8)
)
SELECT TOP 1 ' SELECT * FROM persons WHERE '+ COND
FROM STMT