我在 SQL 中有一个相当复杂的查询,我从各种表中提取大量信息并进行各种连接。我想拉一列来检查特定的 tradeId 是否包含在 2 个不同的表中。我被困在如何正确地做到这一点。
下面的代码为我提供了 Trade 表中不在 TCM 中的所有 TradeId(这只是 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'
这是我尝试将其放入 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'