2014-03-06 37 views
0

切斷UNION我一直在尋找我的源代碼,我發現這個SELECT語句:從選擇

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

不,你不會的,因爲在第一部分要檢索所有cliente爲什麼會產生cliente的id是查詢ID(ID_CLIENTE = @ID_CLIENTE),而在第二部分中,你得到的那些行,其中transportador的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的第一選擇會給你3 ID_CLIENTE,而第二個將給予1試着去了解爲什麼!

2

不,你應該收到不同的結果。更確切地說,你會收到更少的數據。這是因爲你在頂部和底部的SQL查詢中基本上不會查詢同樣的東西。

如你在第二部分在所述TRANS.ID_CLIENTE其可以是不同於CLI.ID_CLIENTE邏輯上應該是因爲後者是在實際上等於TRANS.ID_TRANSPORTADOR和不應該有兩列參照相同相同的ID把一個inner join不同列的表除非Transportador是一種類型的客戶