【发布时间】:2019-12-28 11:01:15
【问题描述】:
我有一个这样的查询;
SELECT DISTINCT TOP (100) PERCENT ,
a.Type,
a.Period,
s.SiteCode,
s.Name AS SiteName,
s.StreetAddress,
.........
FROM dbo.Anal AS a
INNER JOIN dbo.TankSystems AS ts ON a.TankSystemId = ts.TankSystemId
INNER JOIN dbo.Sites AS s ON ts.SiteId = s.SiteId
Where s.SiteId=@SiteId
上述查询按预期返回结果。例如:3 行。
我有另一张表作为坦克,列有 tankid、tank number、siteid、grade、diameter。 我想用左/内连接返回 tanknumber。
如果我添加,
INNER/LEFt JOIN dbo.Tanks AS tt ON s.SiteId =tt.SiteId
结果是三倍。比如说,如果我在 tanktable 中有 3 个特定站点 ID 的条目,我会得到 9 行结果。 我的问题是,除了 siteid 之外,我没有任何其他列来限制加入。
如何避免?
【问题讨论】:
-
没有“左内连接”之类的东西——它要么是“左(外)连接”,要么是“内连接”。
-
您不会根据基表行和/或业务情况说出您想要哪些行。请在代码问题中提供minimal reproducible example--cut & paste & runnable code;具有期望和实际输出的示例输入(包括逐字错误消息);标签和版本;明确的规范和解释。这包括您可以提供的最少代码,即您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)在给出关系(船舶)/关联或表(基础或查询结果)时,说明其中的一行根据其列值说明了业务情况。
-
查询不需要约束(包括PKs & FKs)。在每个基表和查询结果中,了解一行对业务情况的描述是必要且足够的。