2013-12-23 63 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;