我在SQL中有一个非常复杂的查询,我从各种表中提取大量信息并进行各种连接.我想拉一个列来检查特定的tradeId是否包含在2个不同的表中.虽然如此,我仍然坚持如何做到这一点.
下面的代码为我提供了Trade表中所有不在TCM中的TradeIds(它只是2个表的组合).但是,我希望交易表中的所有交易,然后是一列,以表明它是否在TCM中找到.
我知道这将通过CASE WHEN查询完成,但我很困惑如何构造它以便它适合CASE WHEN.
With subCA As
(Select distinct OTPTradeId, ConfoAuditSenderRef from ConfirmationAudit where ConfoAuditSenderRef like 'HBEUM%'),
TCM As
(Select distinct OTPTradeID from subCA union ALL select TradeId from subCA inner join ConfirmationSent on (OTPTradeId = ConfoId
AND ConfoAuditSenderRef like 'HBEUMN%'))
select TradeId from Trade where NOT EXISTS (Select OtpTradeId from TCM where OtpTradeId = TradeId)
and TradeDate = '17 jun 2013'
Run Code Online (Sandbox Code Playgroud)
下面是我试图将它放入CASE WHEN语句但我得到一个错误,因为如果没有我认为的WHERE,则不允许使用NOT EXISTS.但我所追求的是这样的.如果我使用NOT IN它变得非常慢,就像5分钟一样,这是一个更大的查询的一部分,我不希望它花这么长时间 - 如果可能的话!
With subCA As
(Select distinct OTPTradeId, ConfoAuditSenderRef from ConfirmationAudit where ConfoAuditSenderRef like 'HBEUM%'),
TCM As
(Select distinct OTPTradeID from subCA union ALL select TradeId from subCA inner join ConfirmationSent on (OTPTradeId = ConfoId
AND ConfoAuditSenderRef like 'HBEUMN%'))
select TradeId,
CASE WHEN
(TradeId NOT EXISTS (Select OtpTradeId from TCM where OtpTradeId = TradeId) Then 'Y' Else 'N' End As 'TCM'
from Trade
WHERE TradeDate = '17 jun 2013'
Run Code Online (Sandbox Code Playgroud)
试试这个 -
SELECT
t.TradeId
, CASE WHEN NOT EXISTS (
SELECT 1
FROM TCM t2
WHERE t2.OtpTradeId = t.TradeId
) Then 'Y' Else 'N' END As 'TCM'
FROM Trade t
WHERE t.TradeDate = '17 jun 2013'
Run Code Online (Sandbox Code Playgroud)
改变部分
TradeId NOT EXISTS
Run Code Online (Sandbox Code Playgroud)
到
TradeId NOT IN
Run Code Online (Sandbox Code Playgroud)
看一下EXISTS (Transact-SQL)和IN (Transact-SQL)之间的区别
看看这个小例子
除此之外,也许可以重新审视一下CASE 语法 (Transact-SQL)
Simple CASE expression:
CASE input_expression
WHEN when_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
Searched CASE expression:
CASE
WHEN Boolean_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41753 次 |
| 最近记录: |