2016-11-02 2 views
1

다른 테이블의 여러 속성 조회를 기반으로 테이블에서 엔티티를 찾기 : - 사람 내가 2 개 테이블이

  • 표 2 -

    1. 표 1 조회

    사람

    ----------------------------------------------- 
    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 
    

    위의 데이터를 바탕으로 사용자가 선택한 여러 조회가있을 수 있지만 Person 테이블에서 개인 정보를 가져 오는 가장 좋은 방법은 무엇입니까?

    예 :
    lookupIds 1, 2, 8의 경우 모두 사람 ID 1과 2가 반환되어야합니다.
    lookupIds 1, 2, 7, 8의 경우 ID 1이 반환됩니다.
    lookupIds 5, 6, 7, 8에 대해서는 레코드가 반환되지 않습니다.

  • 답변

    0

    아래 쿼리를 사용하여 선택한 값을 기반으로 동적 SQL 문을 작성할 수 있습니다. 이 쿼리는 사용자 테이블에 대해 실행해야하는 실제 쿼리를 제공합니다.

    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