0

我正在尝试运行此连接,但没有收到正确的值。

我的第一个查询返回 25,000 条记录

SELECT count(*) from table1 as DSO,
table2 as EAR
WHERE
(UCASE(TRIM(EAR.value)) = UCASE(TRIM(DSO.value))
 AND 
UCASE(TRIM(EAR.value1) = UCASE(TRIM(DSO.value1))

我的第二个查询返回 3,000,000

SELECT count(*) from table1 as DSO
left join table2 as EAR,
ON
(UCASE(TRIM(EAR.value)) = UCASE(TRIM(DSO.value))
 AND 
UCASE(TRIM(EAR.value1) = UCASE(TRIM(DSO.value1))

表 1 的记录总数约为 45,000,这就是我应该收到的。

4

1 回答 1

0

第一个查询是 INNER JOIN,第二个查询是 LEFT JOIN。你应该期待完全不同的结果。此外,请查看 db2400 使用 UCASE 和 TRIM 函数处理 NULL 的方式。我的猜测是您的左连接正在进行一些您不想要的匹配。

第一个查询中的 INNER JOIN 将从 table1 中排除在 table2 中没有匹配项的任何记录。这很快解释了较低的计数。

如果在 table2 中找到多个匹配项,则任何一个连接都会很高兴地为 table1 中的每条记录创建多行。不同之处在于 LEFT JOIN 还将为 table1 中的每条记录创建一行,这些记录在 table2 中没有匹配项。听起来您希望两张桌子之间会有 1:1 的比赛,但这不是您所得到的。

于 2013-12-13T16:16:30.810 回答