我的应用程序是使用框架开发的,所以我需要遵循一些无法改变的结构。
在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
答案 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;