替换嵌套的SELECT

时间:2017-03-10 21:26:56

标签: postgresql left-join inner-join right-join

如何制作这样的postgreSQL查询:

SELECT event_id, user_id FROM public."point" 
WHERE user_id = (SELECT id FROM public."user" 
WHERE email='test@gmail.com')
带有JOIN语句且没有嵌套SELECT语句的

。以上工作,但我认为它不是最佳的。谢谢你的回答。

1 个答案:

答案 0 :(得分:1)

对于您的特定情况,这应该有效:

SELECT p.event_id, p.user_id
FROM public."point" p JOIN
     public."user" u
     ON p.user_id = u.id 
WHERE u.email = 'test@gmail.com';

通常,在JOININ之间切换时,您需要注意重复项。所以一般的解决方案是:

SELECT p.event_id, p.user_id
FROM public."point" p JOIN
     (SELECT DISTINCT u.id
      FROM public."user" u
      WHERE u.email = 'test@gmail.com'
     ) u
     ON p.user_id = u.id ;

id中的user可能已经是唯一的。