我有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}}
我做错了什么?
谢谢你的帮助。 斯蒂芬
答案 0 :(得分:4)
您尚未提供完整的详细信息,因此请将这些评论视为一般评论。
当您加入2个表时,可能会发生它可以从一个表创建“重复”行。在您的实例中,KTT_DEF
表中可能有多条记录与TRA.TMP_BNAME
相同。当您将其加入TRA.EVENT
表时,它会为TRA.EVENT
表中的每个原始记录创建多条记录。
您可以选择从KTT
计算TRA.EVENT
的不同值并使用DISTINCT
关键字,但您需要将其放入COUNT
:SELECT 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;