具有相同计数值的两个表之间的内部联接

时间:2014-04-08 22:31:07

标签: sql join

我从2天开始就一直在研究这个问题。

我有两个使用SQL Select语句创建的表

SELECT (


) Target

INNER JOIN

SELECT (


) Source

ON Join condition 1
AND Join condition 2
AND Join condition 3
AND Join condition 4
AND Join condition 5

目标表的计数值为10,000条记录。 源表的计数值为10,000条记录。

但是当我在5个连接条件下在两个表之间进行内连接时

我得到了9573条记录。

我基本上试图找到源表和目标表之间的一对一匹配。我觉得目标中的每个字段都与源中的每个字段匹配。

问题:

  1. 为什么即使两个表中的记录值都相同,我的内连接也会提供较少的记录?
  2. 如果符合预期,我怎样才能确保在加入条件后获得确切的10,000条记录?

3 个答案:

答案 0 :(得分:0)

有一些关于不同联盟的非常好的文章。但看起来你对左连接感兴趣。因此,如果它存在于Target中,但不存在于Source中,则不会删除记录。

所以,它将是:

SELECT(...) Target
LEFT OUTER JOIN
SELECT(...) Source
   ON cond1 and cond2 and cond3 and cond4 and cond5

试一试,让我知道它是怎么回事!

答案 1 :(得分:0)

1)INNER JOIN仅输出两个表的JOINING中的行,这两个表的连接列匹配。因此,在您的情况下,两个表中的行中可能不存在Join Condition1,因此某些行将被过滤掉。

2)正如另一张海报提到的左连接是一种方式。您需要查看要用作主数据库的表源或目标,即从这些行开始并返回所有这些行。然后根据您的条件离开加入剩余的表,添加条件匹配的所有列。

如果您向我们提供您正在处理的表格以及您要尝试实现的查询\结果,那可能会更好。

答案 2 :(得分:0)

有时你需要依靠逻辑分析而不是感情。使用此查询查找不匹配的字段,然后完成后续步骤

SELECT 
Target.Col1,Source.Col1,
Target.Col2,Source.Col2,
Target.Col3,Source.Col3
FROM
(

) Target
FULL OUTER JOIN
(

) Source
ON  Target.Col1=Source.Col1
AND Target.Col2=Source.Col2
AND Target.Col3=Source.Col3
WHERE (
Target.Col1 IS NULL 
OR Source.Col1 IS NULL 
OR Target.Col2 IS NULL 
OR Source.Col2 IS NULL 
OR Target.Col3 IS NULL
OR Source.Col3 IS NULL
)