2015-01-15 4 views
0

는 나는 동일한 데이터베이스 SQL 여러 값을 만드는 방법은 동일한 선언 변수를 사용합니까?

  • 약간의 차이 (모두 FK_APPLICATIONID에 존재하는 열을 받아, 하나 =의 일에 참여를 통해 다음과 같은

    1. 링크를 두 테이블을 시도하고있다 다른 즉 열 1 = 1375 및 테이블 중 하나에서 열 2 = 1,376
    2. 는 참조 번호 (QREF1234) 다른 11 PHONENUMBERS I 참조 번호를 입력 할 수 있도록하려는
    3. 포함 존재하고 반환 모두 11 전화 번호 선언 가능한 단일 값으로
    4. 사용 Select * from TableD where phonenum in (@Declared variable) 여기

    내가 지금까지 무엇을 가지고, TABLE1 같은 것들의

    Use Database 1 
    
    DECLARE @Result INT; 
    
    SELECT @Result = D.PhoneNum1,phonenum2,phonenum3,etc 
    
    FROM Table1 
    
    JOIN TABLE2 D on D.FK_ApplicationID= D.FK_ApplicationID 
    
    where TABLE1.FK_ApplicationID = D.FK_ApplicationID + 1 
    and QREF = 'Q045569/2' 
    Use Database2 
    
    Select * from Table3 where PhoneNum = '@result' 
    

    이름은 당신이 할 수없는,

    감사

  • +0

    무엇이 질문입니까? 너는 무엇에 붙어 있니? – alroc

    +0

    'D.PhoneNum1', PhoneNum2, ..'등의 데이터 타입은 무엇입니까 –

    +0

    D.phonenum은 필드와 전화 번호 – Denslat

    답변

    1

    나는 이런 식으로 생각합니다. 정규화되지 않은 열을 "정규화"하고 다른 테이블의 모든 값을 검색하려고합니다. 결과를 임시 테이블로 결합한 다음 값을 검색해야합니다.

    Use Database 1 
    
    
    Create Table #tmp(PhoneNums varchar(50)) 
    
    INSERT INTO #tmp 
    SELECT D.PhoneNum1 
    FROM Table1 
    JOIN TABLE2 D on D.FK_ApplicationID= D.FK_ApplicationID 
    where TABLE1.FK_ApplicationID = D.FK_ApplicationID + 1 
    and QREF = 'Q045569/2' 
    union 
    SELECT D.PhoneNum2 
    FROM Table1 
    JOIN TABLE2 D on D.FK_ApplicationID= D.FK_ApplicationID 
    where TABLE1.FK_ApplicationID = D.FK_ApplicationID + 1 
    and QREF = 'Q045569/2' 
    union 
    SELECT D.PhoneNum3 
    FROM Table1 
    JOIN TABLE2 D on D.FK_ApplicationID= D.FK_ApplicationID 
    where TABLE1.FK_ApplicationID = D.FK_ApplicationID + 1 
    and QREF = 'Q045569/2' 
    
    --Use Database2 
    --you don't need to switch databases if you use a fully qualified name like shown below. 
    Select * from Database2..Table3 where PhoneNum in 
    (
        Select PhoneNums from #tmp 
    ) 
    
    +0

    당신은 stackoverflow의 훌륭한 아들, 그것은 효과가! – Denslat

    +0

    위대한. 내가 도울 수있어서 기뻐. – Jeremy

    +0

    그것은 작동했지만 ... #tmp 테이블이 이미 존재하기 때문에 한 번 이상 실행할 수 없습니다 ... – Denslat

    0

    아니 그들의 진정한 이름이 아닙니다 변수를 사용하여 여러 값을 보유하고 IN 키워드를 사용하십시오. 구분 된 값 목록을 전달하고 구문 분석 한 다음 IN을 구문 분석 한 값의 모음과 함께 사용할 수 있습니다.

    게시 한 코드 샘플에서 대신 테이블 변수를 만들고 그 중에서 선택할 수 있습니다.

    +0

    및 어떻게 그 미안합니까? – Denslat

    +0

    @ Jeremy의 대답은 내가'table variable' 주석으로하려고했던 것입니다. 그는 단지 대신 임시 테이블을 사용하고 있습니다. – ps2goat

    0

    변수에는 단일 값만 포함될 수 있습니다. 당신은 당신이 당신의 가입을 위하여에 사용할 수 있습니다 가입에 대한 관찰 보고서의 무리를 입력하지 않으려면 대신 in 연산자를 사용하여, 당신은 ... 조인과

    Use Database1 
    
    SELECT distinct 
        T3.* 
    FROM 
        Table1 
        JOIN TABLE2 D on D.FK_ApplicationID= D.FK_ApplicationID 
        JOIN Database2.dbo.Table3 T3 on 
         T3.PhoneNum = D.PhoneNum1 
         or T3.PhoneNum = D.PhoneNum2 
         or T3.PhoneNum = D.PhoneNum3 
    where 
        TABLE1.FK_ApplicationID = D.FK_ApplicationID + 1 
        and QREF = 'Q045569/2' 
    
    0

    을이 같은 일을 accompish 수 있습니다.

    select * 
    from Table3 t 
    left join Table2 D on t.PhoneNum in 
        (
         d.phonenum1 
         , d.phonenum2 
         , d.phonenum3 
         , d.phonenum4 
         , d.phonenum5 
         , d.phonenum6 
         , d.phonenum7 
         , d.phonenum8 
         , d.phonenum9 
         , d.phonenum10 
         , d.phonenum11 
        ) 
        AND D.QREF = 'Q045569/2' 
    

    데이터를 표준화 한 다음 권장하지 않습니다.