以下查询:
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?
任何人都可以确认这个结果不太正确,或解释为什么结果数量下降了吗?
答案 0 :(得分:2)
答案 1 :(得分:0)
用AND替换WHERE。
加入后适用的地方; AND在加入期间适用。
答案 2 :(得分:0)
根据您显示的代码,我不相信这是可能的。还有其他事情发生在这里。
答案 3 :(得分:0)
如果AssetId
为NULL
,则联接将无法产生尽可能多的结果。您可以在此处使用此样本小提琴(以下代码):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,从而减少了记录数