出於某種原因,人們喜歡寫馬爾科代碼,把一個過濾器(b.col2 = '值')在JOIN子句中。雖然這起作用,但這不是好習慣。
此外,你應該習慣於在正確的序列中有ON子句。我們將表A連接到表B,爲什麼將它寫爲B.col1 = A.col1,它是向後的。
儘管上述說法有效,但它絕對可以改進。
我創建了以下測試表。
-- Just playing
use tempdb;
go
-- Table A
if object_id('A') > 0 drop table A
go
create table A
(
id1 int,
col1 int,
col2 varchar(16)
);
go
-- Add data
insert into A
values
(1, 1, 'Good data'),
(2, 2, 'Good data'),
(3, 3, 'Good data');
-- Table B
if object_id('B') > 0 drop table B
go
create table B
(
id1 int,
col1 int,
col2 varchar(16)
);
-- Add data
insert into B
values
(1, 1, 'Good data'),
(2, 2, 'Good data'),
(3, NULL, 'Null data');
這裏是改進的語句。我選擇文字而不是變量。但是,您可以更改您的示例。
-- Filter non matching records
SELECT
A.*
FROM A LEFT OUTER JOIN B ON
A.col1 = B.col1
WHERE
B.col1 IS NOT NULL AND
A.id1 in (1, 2) AND
A.col2 = 'Good data'
ORDER BY
A.id1 DESC
這裏是輸出圖像。

您錯過了一個代碼段。 )缺少它的朋友。 – Zane