Sql-Server
如果第二個表沒有數據,則從內部連接表中獲取所有記錄
我按照下面的語法來實現結果。但這需要時間
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) ;