2013-12-23 64 views
2

我有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.

我没有rstand为什么?我想也是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; 

我做错了吗?

Thx寻求帮助。 Stefan

回答

4

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

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

您可以选择从TRA.EVENTKTT的独特价值和使用DISTINCT关键字,但你必须把它放到COUNTSELECT COUNT(DISTINCT E.KTT)。如果您的值实际上是唯一的,这将起作用。如果不是,则计数将与第一个查询不同。

+0

好,我明白了。我怎样才能避免这种情况? –

+1

@StefanBeike - 无论如何你想用'LEFT JOIN'做什么?如果你没有为行倍增效果做这件事似乎毫无意义。 –

+0

还有我想加入的第三张桌子。但在我测试了当前的加入之前,我有点困惑。让我编辑我的答案。 –

2

你想统计不同的KTT? 然后你的代码是错误的。你必须使用:

SELECT  count(DISTINCT KTT) 
FROM TRA.EVENT; 

你得到不同的数,因为你计数每一行。不是独特的。并且因为连接添加更多的行到查询这就是为什么你得到一个更大的数字。

1

试试这个:

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