2016-07-18 80 views
0

我是新來的SQL,並嘗試使用連接來獲取數據。不知道我做錯了什麼。我有兩張桌子。加入不能正常工作


record

recordID|activityName|userID 1 | sale | 5 2 | call | 5 3 | contact | 5

activity

activityID|activityData|userID 1 | 50 | 5 2 | 70 | 5 3 | xyz | 5

結果應該是

recordID|activityName|activityData|userID 1 | sale | 50 | 5 2 | call | 70 | 5 3 | contact | xyz | 5

但它返回

recordID|activityName|activityData|userID 1 | sale | 50 | 5 2 | call | 70 | 5 3 | contact | xyz | 5 1 | sale | 50 | 5 2 | call | 70 | 5 3 | contact | xyz | 5 1 | sale | 50 | 5 2 | call | 70 | 5 3 | contact | xyz | 5

SELECT * FROM tblrecord tr, tblactivity ta WHERE tr.userID = ta.userID AND tr.userID = '5'

爲什麼重複的結果。

PS。 userID是唯一的通用字段,activityID和recordID可以不同。

+0

您要求獲取與'userId = 5'相對應的活動和記錄的所有組合,所有組合都將記錄1與活動1,記錄1與活動2,記錄1與活動3 ...等等。如果這不是你所需要的,那麼你必須告訴我們你需要什麼,我們可以告訴你爲什麼你的查詢是錯誤的。 – apokryfos

+0

我只是想顯示兩個表的數據而不重複 –

回答

3

首先,遵循一個簡單的規則:永不FROM子句中使用逗號。 總是使用明確的JOIN語法。

其次,你似乎想在recordIdactivityId聯接:

SELECT * 
FROM tblrecord tr JOIN 
    tblactivity ta 
    ON tr.userID = ta.userID AND 
     tr.recordId = ta.activityId 
WHERE tr.userID = 5; 

而且,如果該值確實是一個數量不使用單引號。

+0

那麼我不同意規則「從不使用逗號」。相反,請遵循以下規則:「如果術語* cross product *或* cartesian product *對您而言未知,或者您知道它們不是您所需的,則不要在'FROM'子句中使用逗號」 – apokryfos

+0

實際上,userID是隻有普通的領域。用戶可以有多個記錄,並且活動ID和記錄ID可以不同。 –

+1

@apokryfos如果你打算做一個交叉產品,你應該使用一個明確的'CROSS JOIN'。 from子句中的逗號與ANSI-92一起死亡。 – Siyual

1

添加

GROUP BY用戶ID,activityID

到您的查詢。