Sql-Server

如果第二個表沒有數據,則從內部連接表中獲取所有記錄

  • June 11, 2021

我按照下面的語法來實現結果。但這需要時間

IF NOT EXISTS(select * from #tblxyz)
BEGIN
INSERT INTO #tblxyz select NULL
END

Select a.*
       FROM
           tblabc a 
           INNER JOIN #tblxyz b ON a.ID = ISNULL(b.ID,a.id)

如果第二個連接表有一些行,我只想返回那些連接行。只有當第二個表沒有行時,我才想從第一個表返回所有 lrows。

我認為條件ON a.ID = ISNULL(b.ID,a.id)不是最好的方法。它可能會導致計劃效率低下,並可能返回不需要的結果(根據您的規範)。如果tblxyz表中有帶NULL值的行,您仍然會從表中獲取所有行a(可能多次)。

我會在不使用ISNULL()函式的情況下編寫查詢,如下所示:

SELECT a.*
FROM tblabc a 
   INNER JOIN #tblxyz b 
   ON a.ID = b.ID 
   OR NOT EXISTS (SELECT * FROM #tblxyz) ;

或像這樣:

SELECT a.*
FROM tblabc a 
   INNER JOIN #tblxyz b 
   ON a.ID = b.ID 

UNION ALL

SELECT a.*
FROM tblabc a 
WHERE NOT EXISTS (SELECT * FROM #tblxyz) ;

引用自:https://dba.stackexchange.com/questions/135880