如何加入有条件的元素?

How to join elements with condition?

我有两个 table:regionsregions_access_purchases。 我需要一种方法来为用户结果 table 生成有关他当前活跃购买(访问区域)的信息。

  1. 如果用户没有任何 purchased/accessed 地区,他应该获得完整的地区列表。
  2. 如果他有一些购买的区域,他应该得到完整的区域列表,并在右栏中附加关于他的 purchaseEndDate

我尝试了不同的连接,但都不起作用:

SELECT region_id, translite_name,  "purchaseEndDate"  FROM regions
    FULL OUTER JOIN regions_access_purchases reg_purch ON regions.id = reg_purch.region_id
    WHERE user_id = 1 AND 
   "purchaseEndDate" > now()

我只得到两个地区,但我需要得到完整的地区列表,右边一列带有“purchaseEndDate”。如果“purchaseEndDate”小于现在,则不应出现,但区域应显示在列表中。

是否可以进行这样的连接?

http://sqlfiddle.com/#!15/30e72/2

如果您将条件从 WHERE 移动到 FROM 语句并将 FULL JOIN 更改为 LEFT JOIN 您将获得预期结果:

SELECT * FROM regions
LEFT JOIN regions_access_purchases reg_purch ON regions.id = reg_purch.region_id AND user_id = 1 AND "purchaseEndDate" > now()

P.S。不确定是否需要将 purchaseEndDate 添加到查询中,请按照示例中的方式添加它。