我正在寻找我的源代码,我发现了这个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
,我会收到相同的结果吗?
答案 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_CLIENTE
而CLI.ID_CLIENTE
可能与TRANS.ID_TRANSPORTADOR
不同时,逻辑应该是{{1}},因为后者实际上等于{{1}并且不应该有两列在同一个表中引用不同列中的相同ID,除非Transportador是一种客户