我从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条记录。
我基本上试图找到源表和目标表之间的一对一匹配。我觉得目标中的每个字段都与源中的每个字段匹配。
问题:
答案 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
)