2014-03-06 3 views
0

에서 UNION을 잘라 나는이 선택 문을 발견내가 내 소스 코드를 찾고 있었어요 선택

SELECT ID_CLIENTE, APELIDO 
FROM DBCLIENTE 
WHERE 
    STATUS = 'A' 
    AND ID_CLIENTE = @ID_CLIENTE 

UNION 

SELECT CLI.ID_CLIENTE, CLI.APELIDO 
FROM 
    DBCLIENTE CLI 
     INNER JOIN dbCLIENTE_TRANSPORTADOR TRANS ON TRANS.ID_TRANSPORTADOR = CLI.ID_CLIENTE 
WHERE 
    CLI.STATUS = 'A' 
    AND TRANS.ID_CLIENTE = @ID_CLIENTE 

내 질문에 내가 잘라 경우 UNION 두 번째 SELECT 내가 같은 결과를받을 것입니까?

답변

3

아니 당신은 않을 것없는 첫 번째 부분에서 당신은 ', 두 번째 부분에 당신이 그 행을 얻을 수있는 반면 곳 transportador의 ID를 조회 된 아이디 (ID_CLIENTE = @ID_CLIENTE)이다의 ID를 cliente 모든 cliente의 검색되기 때문에 질의 ID (TRANS.ID_CLIENTE = @ID_CLIENTE)와 같습니다. 두 번째 WHERE 절의 TRANS에 유의하십시오. 예를 들어

이 데이터를 고려해

Cliente 
ID_CLIENTE  STATUS 
-----------  -------- 
1     A 
2     X 
3     A 


Transportador 
ID_TRANSPORTADOR ID_CLIENTE 
----------------- ----------- 
1     3 
2     2 
3     1 

@ID_CLIENTE = 3 첫 번째 이유를 이해 1. 시도를 줄 것이라고하면서, ID_CLIENTE 당신에게 세를 줄 것이다 선택!

2

아니요 다른 결과가 나타납니다. 더 정확하게 말하면 더 적은 데이터를 받게됩니다. 근본적으로 상단 및 하단 SQL 쿼리에서 동일한 것을 쿼리하지 않기 때문입니다.

후자는 TRANS.ID_TRANSPORTADOR 동일한 사실이며 동일한 동일 ID를 참조하여 두 개의 열이 없어야로이어야 논리적되는 CLI.ID_CLIENTE 다를 수있다 TRANS.ID_CLIENTE 위에 두 번째 부분에 inner join 바꾸어됨에 Transportador가 클라이언트의 유형이 아닌 한 다른 열 의 테이블

관련 문제