2017-09-26 37 views
0

我的查詢是:Postgres的左表空JOIN

SELECT main.group_id, s_ref.title, s_ref.username, main.m_per_group, main.pos, u.lang 
FROM (
    SELECT user_id, group_id, COUNT(user_id) AS m_per_group, 
     ROW_NUMBER() OVER (
      PARTITION BY group_id 
      ORDER BY COUNT(group_id) DESC 
      ) AS pos 
    FROM messages 
    WHERE message_date > date_trunc('week', now()) 
    GROUP BY group_id, user_id 
) AS main 
LEFT OUTER JOIN supergroups_ref AS s_ref 
USING (group_id) 
RIGHT JOIN users AS u 
ON u.user_id = main.user_id 
WHERE main.user_id = %s 
ORDER BY m_per_group DESC 

的問題是,當主返回0元,我不明白無論是用戶的用戶的語言加入,但我得到完全[]

我反而想得到[(None, None, None, None, 'en')]這就是爲什麼我使用了正確的連接。我怎樣才能得到我想要的結果?

回答

0

移動此條件:

WHERE main.user_id = %s 

向該主子查詢:

WHERE message_date > date_trunc('week', now()) and main.user_id = %s 

它現在它正在轉彎外的方式加入到內連接。