2012-06-01 47 views
2

這是查詢:是否有可能將此查詢轉換爲連接?

SELECT * 
FROM square_achievements_achievements 
JOIN square_achievements_achievement_counters ON square_achievements_achievement_counters.SAA_ID = square_achievements_achievements.SAA_ID 
JOIN square_achievements_counters ON square_achievements_counters.SAC_ID = square_achievements_achievement_counters.SAC_ID 
WHERE square_achievements_counters.eventObject = 'CommentEvent' 
AND square_achievements_counters.eventType = 'add' 
AND square_achievements_achievements.SAA_ID NOT IN 
(
    SELECT square_achievements_achievements.SAA_ID 
    FROM square_achievements_achievements 
    JOIN square_achievements_user_achievements ON square_achievements_user_achievements.SAA_ID = square_achievements_achievements.SAA_ID 
    WHERE square_achievements_user_achievements.UID = 83 
) 

如果有可能,會是更有效的來寫這個查詢作爲加入?如果是這樣,它將如何被重寫?

+0

對不起,我搞砸了在我原來的查詢中 - 對於第一次連接應該是SAA_ID = SAA_ID。我會更新我的問題。 感謝您的幫助。只是通過解答... – nomasprime

回答

1
SELECT a.* 
FROM achievements a 
JOIN achievement_counters ac 
ON  ac.saac_id = a.saa_id 
JOIN counters c 
ON  c.sac_id = ac.sac_id 
WHERE c.eventObject = 'CommentEvent' 
     AND c.eventType = 'add' 
     AND a.saa_id NOT IN 
     (
     SELECT saa_id 
     FROM user_achievements 
     WHERE uid = 83 
     ) 

這很不錯。

如果你想連接,使用此:

SELECT a.* 
FROM achievements a 
JOIN achievement_counters ac 
ON  ac.saac_id = a.saa_id 
JOIN counters c 
ON  c.sac_id = ac.sac_id 
LEFT JOIN 
     user_achievements ua 
ON  ua.uid = 83 
     AND ua.saa_id = a.saa_id 
WHERE c.eventObject = 'CommentEvent' 
     AND c.eventType = 'add' 
     AND ua.saa_id IS NULL 
+0

傳奇!現在很直觀,我已經看到了答案。謝謝 – nomasprime

0

我更喜歡使用相關名稱來提高代碼

的可讀性試試這個:

SELECT * 
FROM square_achievements_achievements a 
JOIN square_achievements_achievement_counters b ON b.SAAC_ID = a.SAA_ID 
JOIN square_achievements_counters c ON c.SAC_ID = b.SAC_ID 
JOIN square_achievements_user_achievements d on d.SAA_ID = a.SAA_ID 
JOIN square_achievements_user_achievements u on d.SAA_ID = u.SAA_ID AND u.UID = 83 
WHERE c.eventObject = 'CommentEvent' 
AND a.eventType = 'add' 
+0

沒有爲我工作 - 錯誤使用「AND JOIN」並刪除AND會給出錯誤的結果。 – nomasprime

+0

對不起,有一個錯字 –

相關問題