gpt4 book ai didi

sql-server - SQL 如何将 CASE 与 NOT EXISTS 语句一起使用

转载 作者:行者123 更新时间:2023-12-02 15:14:39 27 4
gpt4 key购买 nike

我在 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'

最佳答案

试试这个 -

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'

关于sql-server - SQL 如何将 CASE 与 NOT EXISTS 语句一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17745755/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com