基于在另一个表中的多个属性查找从表中查找实体

本文关键字:查找 属性 实体 另一个 | 更新日期: 2023-09-27 18:16:00

我有两个表,定义如下:

  1. 表1 -人员
  2. 表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