Sql server SQL如何使用NOT EXISTS语句的用例
我在SQL中有一个相当复杂的查询,我从各种表中提取大量信息,并进行各种连接。我想拉一列来检查特定的tradeId是否包含在两个不同的表中。不过,我一直在思考如何正确地做到这一点 下面的代码给出了交易表中不在TCM中的所有交易ID(这只是两个表的组合)。然而,我希望所有的交易从贸易表,然后一列,以表明它是否是在TCM或没有找到 我知道这将在CASE-WHEN查询中完成,但我不知道如何构造它,以便它适合CASE-WHEN查询Sql server SQL如何使用NOT EXISTS语句的用例,sql-server,exists,Sql Server,Exists,我在SQL中有一个相当复杂的查询,我从各种表中提取大量信息,并进行各种连接。我想拉一列来检查特定的tradeId是否包含在两个不同的表中。不过,我一直在思考如何正确地做到这一点 下面的代码给出了交易表中不在TCM中的所有交易ID(这只是两个表的组合)。然而,我希望所有的交易从贸易表,然后一列,以表明它是否是在TCM或没有找到 我知道这将在CASE-WHEN查询中完成,但我不知道如何构造它,以便它适合CASE-WHEN查询 With subCA As (Select distinct OTPTra
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是不允许的。但我想要的是这样的东西。如果我不使用,它会变得非常慢,比如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'
换零件
TradeId NOT EXISTS
到
看看和之间的区别
看看这个小例子
除此之外,也许还可以重新讨论
你可以用
. 根据你的需要试试。试试这个-
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'
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
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'