SQL Server:左连接使用1 = 1

时间:2017-07-18 15:28:22

标签: sql-server left-join

我的应用程序是使用框架开发的,所以我需要遵循一些无法改变的结构。

在SQL Server中,我需要实现inner join using left join which is possible using 1=1

现在,在我的情况下,有一个Account表,其中包含一些详细信息,account_ext表中包含一些与帐户相关的信息列。

有一个ACCT_NAME_LNK表,其中包含指向特定帐户的特定名称的链接,并且还有到期日期

现在我需要获取所有链接到名称链接表和acct表

的记录

我的条件是它不应该显示已过期的记录以及条件T2.AcctHDDescription like '6%'

这意味着应该有名称链接或ACCTHDDescription应该'6%'

所以它不应该显示已过期的记录,但它正在显示

以下是我的查询

DECLARE @EXPDATE DATETIME 
SET @EXPDATE = GETDATE()

SELECT DISTINCT   
    T1.ID, T1.AccountID, T2.AcctHDDescription 
FROM 
    ACCT T1 
LEFT JOIN  
    ACCT_Ext T2 ON T1.ID = T2.ID 
LEFT JOIN  
    ACCT_NAME_LNK T3 ON 1 = 1 
                     AND ISNULL(T3.EXPIRED, '2999-12-31') > @EXPDATE
WHERE
    T1.ID = T3.acctid OR T2.AcctHDDescription LIKE '6%'

添加了一个包含更多细节的图片 我需要在1 = 1时使用左连接来实现输出 它有或条件

[{链接可用且未过期}或{AcctHDDescription =' 6%'}]

Latest Image which shows output

预期产出 Id AccountId AcctHDDDescription 3 33333 1234 4 62343 345 6 624323 6667

2 个答案:

答案 0 :(得分:0)

这是一个奇怪的查询,但我认为你的问题在于WHERE子句OR条件。我最初的猜测是你想将ID连接移动到左连接中:

declare @EXPDATE datetime
set @EXPDATE=GETDATE()

SELECT DISTINCT   T1.ID,T1.AccountID ,T2.AcctHDDescription 
FROM ACCT T1 LEFT JOIN  ACCT_Ext  T2 ON T1.ID  = T2.ID 
LEFT JOIN  ACCT_NAME_LNK  T3 ON 1  = 1 
   AND ISNULL( T3.EXPIRED, '2999-12-31' ) > @EXPDATE
   AND T1.ID = T3.acctid
where  T2.AcctHDDescription like '6%'

答案 1 :(得分:0)

猜猜你想要什么,

DECLARE @EXPDATE DATETIME
SET @EXPDATE=GETDATE();

SELECT T1.ID
    , T1.AccountID  
    , T2.AcctHDDescription 
    , T3.Expired
FROM Acct T1 
LEFT JOIN  Acct_Ext  T2 
    ON T1.ID  = T2.ID 
LEFT JOIN ACCT_NAME_LNK  T3 
        ON T1.ID = T3.acctid
WHERE  (T2.AcctHDDescription like '6%' AND ISNULL(T3.EXPIRED, '2999-12-31' ) > @EXPDATE)
OR ISNULL( T3.EXPIRED, '2999-12-31' ) > @EXPDATE;