SQL - 添加左连接后结果数量的意外更改

时间:2011-07-26 09:45:09

标签: sql left-join

以下查询:

SELECT Assets.Id, Assets.Description
FROM Assets
WHERE CaseNumber = 1265

产生29个结果。

将以下左连接添加到另一个表后:

SELECT Assets.Id, Assets.Description
FROM Assets
LEFT JOIN StockShares ON StockShares.AssetId = Assets.AssetId
WHERE CaseNumber = 1265

我降到了3.这完全抛弃了我。我以为我知道SQL?

任何人都可以确认这个结果不太正确,或解释为什么结果数量下降了吗?

5 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

用AND替换WHERE。

加入后适用的地方; AND在加入期间适用。

答案 2 :(得分:0)

根据您显示的代码,我不相信这是可能的。还有其他事情发生在这里。

答案 3 :(得分:0)

如果AssetIdNULL,则联接将无法产生尽可能多的结果。您可以在此处使用此样本小提琴(以下代码):http://sqlfiddle.com/#!18/97124/2

CREATE TABLE Assets(
    Id INT PRIMARY KEY IDENTITY,
    Description VARCHAR(200),
    AssetId INT
);

CREATE TABLE Stockshares(
  AssetId INT
);

insert into assets values('desription1', 1);
insert into assets values('desription2', null);
insert into assets values('desription3', null);

insert into Stockshares values(1);
insert into Stockshares values(2);
insert into Stockshares values(3);


Select * from assets
join stockshares on stockshares.assetid = assets.assetid
where stockshares.AssetId = 1 -- change to 2,  get less results because AssetId is null for asset 2

以下是有关加入null的一些文档:https://docs.microsoft.com/en-us/sql/relational-databases/performance/joins?view=sql-server-2017#nulls_joins

答案 4 :(得分:0)

尝试在加入您之前将where子句放在相同的结果上。在左联接发生后在哪里应用的事实已过滤掉大多数记录,因为在不匹配记录上的左联接将为null,从而减少了记录数