【问题标题】:Fetch not null values first, if not found then fetch null value -Postgres首先获取非空值,如果未找到则获取空值 -Postgres
【发布时间】:2014-03-17 20:59:03
【问题描述】:

我有 2 张桌子。 table1 有主要记录。 table2 是具有多个 table1.id 条目的从表。有些条目可能是空白的。

首先,如果设置了table2.data 并且日期没有过去,那么我必须在连接 2 个表时获取该记录。如果没有table2.data 不为空值且日期不过去的记录,则从table2 获取最后更新的记录,具有table2.data IS NULL

我需要一个查询来获取 NOT NULL 或 NULL 记录。

表1

id  name   date
1   Abc    2013-12-09
2   Test   2014-12-09
3   Xyz    2012-02-10

表2

id  user_id  data
1   1        test
2   1        NULL
3   2        NULL
4   3        blah blah.....

如果我加入 2 个表格,我的结果应该是这样的,当我通过 user_id = 1 并将日期比较为今天的日期时

结果

id   user_id    data
1    1          NULL

如果我加入 2 个表,我的结果应该是,当我通过 user_id = 2

结果

id   user_id    data
1    2          NULL

【问题讨论】:

  • 到目前为止,您尝试使用哪些查询来完成这项工作,您背后的逻辑是什么?
  • 您的描述为解释留下了空间。它在then fetch last updated record from table2 处崩溃:是什么定义了table2 中的最后一次更新?

标签: sql postgresql


【解决方案1】:

这是一个有根据的猜测。你的描述太模糊了。

SELECT DISTINCT ON (t2.user_id)
       *
FROM   table1 t1
JOIN   table2 t2 ON t2.user_id = t1.id
WHERE  t1.date > current_date
ORDER  BY t2.user_id, t2.data DESC NULLS LAST

假设:

  • table2.user_id 对应于table1.id
  • 您只需要table1.date 是未来日期的行。
  • (user_id, data)table2 中是唯一的,或者您需要额外的排序条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-17
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    相关资源
    最近更新 更多