2012-04-02 99 views
1

我有一個SQL查詢的問題。 我需要獲取用戶列表。問題是我使用的left join。 這是我的查詢如何從DB獲得良好結果

SELECT 
u.* 
FROM 
users u LEFT JOIN game g on g.user_id = u.user_id 
LEFT JOIN game_actions ga on ga.game_id = g.id 
LEFT JOIN emails e on e.id = ga.email_id 
WHERE 
u.user_id = 0 
AND u.is_contact_by_email = 1 
    AND email.type = 2 

該查詢返回相同的用戶,曾多次因與其他表 我想這個查詢返回每個用戶只是一個時間的加入。 我正在使用sql開發人員。

感謝先進。

回答

0

我猜想每個用戶都有更多的遊戲,動作和電子郵件。你如何想象結果表看起來像?因爲當你只從用戶表中選擇(SELECT u.*),那麼加入其他人沒有意義。如果您需要其他表格,請使用GROUP BY (u.user_id)按用戶對行進行分組。

+0

我需要加入,我更新了我的查詢。 – Ofer 2012-04-02 12:58:28

1

鑑於您沒有爲任何目的使用遊戲,遊戲動作或電子郵件(它們不會過濾用戶,也不會使用這些表中的數據來豐富結果),因此無需加入這些表都:

SELECT 
    u.* 
FROM users u 
WHERE u.user_id = 0 
    AND u.is_contact_by_email = 1 
+0

我需要這個連接...查詢的結尾是和email.type = 2 – Ofer 2012-04-02 12:47:46

1

您可以通過user_id組的結果,並使用aggregate functions返回等領域,爲eaxmple -

SELECT u.user_id, GROUP_CONCAT(g.game_id) games FROM users u 
    LEFT JOIN game g 
    ON g.user_id = u.user_id 
    LEFT JOIN game_actions ga 
    ON ga.game_id = g.id 
    LEFT JOIN emails e 
    ON e.id = ga.email_id 
WHERE 
    u.user_id = 0 AND u.is_contact_by_email = 1 
GROUP BY 
    u.user_id 
+0

對於'GROUP_CONCAT()'+1。 – glglgl 2012-04-02 12:45:19

+0

GROUP_CONCAT不起作用,我需要爲它做點特別的事情嗎? – Ofer 2012-04-02 12:59:45

+0

GROUP BY user_id將顯示唯一用戶,然後其他多個記錄(具有相同的user_id)必須使用集合函數進行處理。我已經添加了GROUP_CONCAT作爲示例,您可以使用另一個 - MAX,MIN,... – Devart 2012-04-02 13:54:02

0

嘗試使用不同的關鍵字與您的查詢