2009-12-17 5 views
0

우리는 다른 데이터베이스를 처리하기 위해 최대 절전 모드를 사용합니다. 데이터 원본이 MS SQL 일 때 쌍 비교 SQL 사용에 문제가 있습니다. 이 문을 ms sql로 변환하는 방법을 알고 싶습니다.최대 절전 모드에서 MS SQL 용 쌍 비교 SQL을 변환

다음은 단순화 된 sql입니다.

주의 :

  1. 1 열 및 2 열 모두 UUID 및 숫자 유형입니다. (MS의 SQL에서 숫자가 될 것이다 (19,0)
  2. 변환 된 SQL 문을 양식에 따라해야한다 -. 하위 쿼리에 조건이
  3. 새로운 문이 고려 실행 성능을해야

코드 :.

select * from table1 t1 
where (t1.column1, t1.column2) in 
      select (sub.column1, sub.column2) from table2 sub 
      where sub.column3 = $var 

다음 내 재판 내가 문자열 비교 및 ​​인덱스에게 영향을하지 않습니다에 낮은 성능을 두려워입니다

SELECT * 
FROM TABLE_1 T1 
WHERE CAST(COL1 AS VARCHAR(19))+CAST(COL2 AS VARCHAR(19)) 
IN (SELECT CAST(COL1 AS VARCHAR(19))+CAST(COL2 AS VARCHAR(19)) 
    FROM TABLE_2 T2 
    WHERE T2.COL3 = 'A') 

우리에게 어떤 제안이 있습니까? 감사합니다.

답변

2

왜 조인이 아닌 Where-In 절을 사용해야합니까?

 
select 
    t1.* 
from 
    table1 t1 
    inner join table2 sub on 
     t1.column1 = sub.column1 
     and t1.column2 = sub.column2 
     and sub.column3 = $var 

0

는 테이블이 같은 가정 해 봅시다 :

CREATE TABLE SuperHeroes 
(
    name varchar(100), 
    franchise varchar(100) 

); 

현재의 데이터는

'Batman', 'DC' 
'SpiderMan', 'Marvel' 
'Superman', 'DC' 
'Wolverine', 'Marvel' 

당신은

SELECT name, franchise 
FROM SuperHeroes 
WHERE 
(name, franchise) 
IN 
( 
'Superman', 'DC', 
'Wolverine', 'Marvel' 
) 

하지만 그건 늘 실행과 같은 쿼리 싶어합니다. 구문 오류입니다. 올바른 구문은

SELECT name, franchise 
FROM SuperHeroes h 
WHERE 
NOT EXISTS 
(
    (SELECT h.name, h.franchise) 
    EXCEPT 
    ( 
    SELECT 'Superman', 'DC' 
    UNION 

    SELECT 'Wolverine', 'Marvel' 
    ) 
) 

희망입니다.

관련 문제