有条件地选择不同的关系以反映用户的覆盖(Postgres)

时间:2018-01-08 22:34:38

标签: sql postgresql database-design

我希望在SELECT期间使用来自不同表(具有相同字段)的值覆盖表中的内容,以防出现这些内容。我正在使用Postgres。

我的用例是:我派生并存储一些数据(主要是其他表之间的关系),但希望用户能够纠正这些数据。在查询中,应返回那些用户更正的数据和关系,但我不想丢失原件。

我该怎么做?

  • 我想我可以conditionally select from other tables,但这是最好的方法吗?
  • 我是否必须手动为每个字段实现条件,或者我可以一次性完成所有这些条件吗?

我也可以在应用程序逻辑中执行此操作,但如果可用,则更喜欢数据库中的干净解决方案。

1 个答案:

答案 0 :(得分:0)

你可以使用带有case语句的左连接:

SELECT 
    CASE 
      WHEN different_table.id IS NULL THEN content_table.name 
      ELSE different_table.name END AS name,
    CASE 
      WHEN different_table.id IS NULL THEN content_table.price 
      ELSE different_table.price END AS price
FROM content_table
LEFT OUTER JOIN different_table ON content_table.id = different_table.id