加入时计数结果不同

时间:2013-12-23 10:39:23

标签: sql select join count distinct

我有sql

SELECT DISTINCT 
  count(KTT)
FROM 
  TRA.EVENT;

它给了我1901335的数字。

现在我想用这样的join扩展sql:

SELECT DISTINCT 
  count(E.KTT)
FROM 
  TRA.EVENT E
LEFT JOIN TRA.TMP_BNAME TBN ON E.KTT = TBN.KTT_DEF;

但是我的结果是1942376。

我不明白为什么?我希望也是1901335的结果。我认为我join根据TBN的条目轻松EVENT SELECT DISTINCT E.KTT, TB.B_BEZEICHNER FROM TRA.EVENT E LEFT JOIN TRA.TMP_BNAME TBN ON E.KTT = TBN.KTT_DEF LEFT JOIN TRA.TMP_B TB ON TBN.B_ID = TB.B_ID; 的值?

修改

{{1}}

我做错了什么?

谢谢你的帮助。 斯蒂芬

3 个答案:

答案 0 :(得分:4)

您尚未提供完整的详细信息,因此请将这些评论视为一般评论。

当您加入2个表时,可能会发生它可以从一个表创建“重复”行。在您的实例中,KTT_DEF表中可能有多条记录与TRA.TMP_BNAME相同。当您将其加入TRA.EVENT表时,它会为TRA.EVENT表中的每个原始记录创建多条记录。

您可以选择从KTT计算TRA.EVENT的不同值并使用DISTINCT关键字,但您需要将其放入COUNTSELECT COUNT(DISTINCT E.KTT) 。只要您的值实际上是唯一的,这将有效。如果不是,则计数将与第一个查询不同。

答案 1 :(得分:2)

您想要计算不同的KTT吗? 那你的代码是错的。你必须使用:

SELECT     count(DISTINCT KTT) 
FROM    TRA.EVENT;

你得到不同的数,因为你计算每一行。不是截然不同的。并且因为联接向查询添加了更多行,这就是为什么你得到一个更大的数字。

答案 2 :(得分:1)

试试这个:

SELECT COUNT(DISTINCT E.KTT)
FROM TRA.EVENT E
LEFT JOIN TRA.TMP_BNAME TBN ON E.KTT = TBN.KTT_DEF;