Sql server SQL如何使用NOT EXISTS语句的用例

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

我在SQL中有一个相当复杂的查询,我从各种表中提取大量信息,并进行各种连接。我想拉一列来检查特定的tradeId是否包含在两个不同的表中。不过,我一直在思考如何正确地做到这一点

下面的代码给出了交易表中不在TCM中的所有交易ID(这只是两个表的组合)。然而,我希望所有的交易从贸易表,然后一列,以表明它是否是在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是不允许的。但我想要的是这样的东西。如果我不使用,它会变得非常慢,比如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'