从选择中切断UNION

时间:2014-03-06 12:37:38

标签: sql select 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,我会收到相同的结果吗?

2 个答案:

答案 0 :(得分:3)

不,你不会,因为在第一部分中,你正在检索cliente的id是查询的id(cliente)的所有ID_CLIENTE = @ID_CLIENTE,而在第二部分如果您获得transportador的id等于查询ID(TRANS.ID_CLIENTE = @ID_CLIENTE)的那些行。请注意第二个TRANS - 子句中的WHERE

例如,请考虑以下数据:

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.尝试理解原因!

答案 1 :(得分:2)

不,您应该收到不同的结果。更准确地说,您将获得更少的数据。这是因为您实际上并不是在查询顶部和底部SQL查询中同样的事情。

当你在inner join上放置一个TRANS.ID_CLIENTECLI.ID_CLIENTE可能与TRANS.ID_TRANSPORTADOR不同时,逻辑应该是{{1}},因为后者实际上等于{{1}并且不应该有两列在同一个表中引用不同列中的相同ID,除非Transportador是一种客户