2010-03-23 56 views
1

我想計算從2(或可能更多的表)有多少獨特的登錄。MySQL,在執行SELECT DISTINCT查詢之前合併2個或更多表?

我嘗試這樣做:

SELECT count(distinct(l1.user_id)) 
FROM `log_1` l1 
LEFT JOIN `log_2` l2 
ON l1.userid = l2.userid; 

但它給我L1的結果。如果我沒有把li放在li.userid(distinct)上,它會說「不明確」。

如何組合表格,然後選擇組合表格的唯一登錄名?

編輯:

測試:I測試計(不同(l1.userid))和計數(不同(l2.userid))。它給了我不同的結果

+0

您可以通過「組合表格」來定義您的意思嗎?你想要哪個用戶出現在任何一個表中?出現在兩個表中的用戶?還有別的嗎? – 2010-03-23 09:35:57

+0

@Mark Byers:如果用戶出現在兩張表上,我認爲這會更準確嗎?組合4張桌子需要很長時間,超過2分鐘,而我現在還在等待。 (使用我上面的代碼,將LEFT JOIN更改爲INNER JOIN) – mysqllearner 2010-03-23 09:46:29

回答

1

如果您使用的是LEFT JOIN,那麼您將在l1中的每一行的組合結果中獲得至少一行,因此如果您只需要一個不同的計數,則聯接是完全不必要的。這將給你相同的結果作爲查詢:

SELECT count(distinct(l1.user_id)) 
FROM `log_1` l1 

也許你想要一個INNER JOINUNION呢? A UNION將統計用戶是否出現在任一表中。 INNER JOIN只有在它們出現在兩個表中時纔會計數。以下是UNION的一個示例:

SELECT count(*) FROM (
    SELECT distinct(user_id) FROM `log_1` 
    UNION 
    SELECT distinct(user_id) FROM `log_2` 
) T1