如何加入有条件的元素?
How to join elements with condition?
我有两个 table:regions
和 regions_access_purchases
。
我需要一种方法来为用户结果 table 生成有关他当前活跃购买(访问区域)的信息。
- 如果用户没有任何 purchased/accessed 地区,他应该获得完整的地区列表。
- 如果他有一些购买的区域,他应该得到完整的区域列表,并在右栏中附加关于他的
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”小于现在,则不应出现,但区域应显示在列表中。
是否可以进行这样的连接?
如果您将条件从 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 添加到查询中,请按照示例中的方式添加它。
我有两个 table:regions
和 regions_access_purchases
。
我需要一种方法来为用户结果 table 生成有关他当前活跃购买(访问区域)的信息。
- 如果用户没有任何 purchased/accessed 地区,他应该获得完整的地区列表。
- 如果他有一些购买的区域,他应该得到完整的区域列表,并在右栏中附加关于他的
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”小于现在,则不应出现,但区域应显示在列表中。
是否可以进行这样的连接?
如果您将条件从 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 添加到查询中,请按照示例中的方式添加它。