加入更多表使我从查询中获得更少的数据

时间:2010-11-15 14:07:36

标签: sql stored-procedures join

我对一个SP有一个问题,当我加入一些特定的表时,我从SP获得的数据较少,然后当它们不包含在SP中时我得到了。 我还没有从他们那里得到任何数据,我只是加入他们而且只是让SP给我发送的数据更少。 知道问题可能是什么?感谢

6 个答案:

答案 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加入非常好。我想它会回答你的问题,为什么某些数据集可能会丢失,也可能不会丢失。