我对一个SP有一个问题,当我加入一些特定的表时,我从SP获得的数据较少,然后当它们不包含在SP中时我得到了。 我还没有从他们那里得到任何数据,我只是加入他们而且只是让SP给我发送的数据更少。 知道问题可能是什么?感谢
答案 0 :(得分:2)
听起来您加入的表格中没有匹配的行。
如果您将联接更改为LEFT OUTER JOIN
,您应该获得您期望的行(但显然,检查输出以确保您这样做!)
答案 1 :(得分:1)
连接通常在“ON”子句中具有连接条件。该条件说明如何匹配正在连接的表之间的行。如果对于一方的特定行,另一方没有匹配的行,那么我们需要考虑我们正在处理的连接类型:
对于INNER JOIN,该行将被丢弃。
对于LEFT JOIN,如果行来自“LEFT”表源,则会出现此行,但“RIGHT”表源中的所有列都会显示NULL。
RIGHT JOIN类似于左连接,方向已交换。
答案 2 :(得分:0)
无论您是否要求这些表中的数据,它们都被包含在连接中,结果集将返回符合您指定条件的行。
您可能希望发布SP的2个版本,一个包含少量表格,然后是一个包含一个或多个联接的版本,以便更好地解释幕后发生的情况。
答案 3 :(得分:0)
听起来你在做INNER JOIN
。如果您加入的任何属性都在两个表中,则只返回记录。举个例子:
Customers
ID Name
1 Mike
2 Steve
3 Amy
Address
ID Address
1 123 Main
3 456 Oak
如果你
SELECT Name, Adddress FROM NAME N
Join Address A ON N.Id = A.Id
只有Mike和Amy的记录将被退回,因为Steve没有地址记录。
答案 4 :(得分:0)
我不知道你在做什么样的联接,但它存在三种联接
INNER JOIN:检索双方匹配的数据
LEFT(OUTER)JOIN:检索仅在左侧匹配的数据,即使right为null
RIGHT(OUTER)JOIN检索右侧仅为mach的数据,即使left为null
根据您使用的是哪种,可以检索数据还是不可以。
但是发布您的查询会让我们告诉您可能存在的真正问题。
希望我能提供帮助,
答案 5 :(得分:0)
见this blog post by Jeff Atwood。它解释了SQL加入非常好。我想它会回答你的问题,为什么某些数据集可能会丢失,也可能不会丢失。