【问题标题】:Oracle: unable to fetch the record based on latest record inserted and join with multiple tablesOracle:无法根据插入的最新记录获取记录并与多个表连接
【发布时间】:2014-11-03 01:20:22
【问题描述】:

我有一个如下表:

USERS

 USERID             EMAIL
 ----------------------
 1              xxx@xxx.com
 2              yyy@yyy.com

AUDIT_ITEM
 AI_ID          AI_NAME
----------------------------
   1            AAA
   2            BBB
   3            CCC
   4            DDD

AUDIT_LOG
AL_ID       USERID      AI_ID   PACKAGING_ID        INSERT_DATE
--------------------------------------------------------------------
1           2           1           100             09/09/2014
2           1           2           102             09/09/2014
3           1           3           103             09/09/2014
4           1           1           100             09/09/2014 ( LATEST RECORD INSERTED)

现在我想要基于 AUDIT_LOG 表中插入的最新记录的用户电子邮件(在本例中为 xxx@xxx.com),其中 AI_NAME='AAA' 和 PACKAGING_ID = 100。注意 INSERT_DATE 是 DATE 类型

【问题讨论】:

  • 您对“最后插入的记录”的标准是什么?是INSERT_DATE,那么你显示的四条记录没有区别。如果是最棒的AL_ID,那你应该这么说。
  • 是的,它的 INSERT_DATE 必须决定哪条记录是最新的
  • 但是INSERT_DATE在所有四条记录上都是一样的,那么你怎么知道哪一条是最新的呢?
  • insert_date 是 DATE 类型,在 oracle 中它只显示日期但实际上它也有时间,所以我们必须根据时间戳来识别

标签: sql oracle join oracle10g left-join


【解决方案1】:

这使用with 子句将日志条目限制为packaging_id 100 和ai_name AAA 的条目。那么它就变成了:

with logs as
       (select l.*
          from audit_log l join audit_item i on l.ai_id = i.ai_id
         where l.packaging_id = 100 and i.ai_name = 'AAA')
select u.email
  from users u join logs l on u.userid = l.userid
 where l.insert_date = (select max(insert_date) from logs);

【讨论】:

  • 这不起作用,因为您没有考虑 AI_NAME='AAA' ,我只希望查询中的 AI_ID=1 我们应该检查类似 where audit_log.AI_ID=audit_item.AI_ID 和 audit_item.NAME=' AAA'
  • 已更新以包含项目条件。
  • 感谢您的支持,但我对在查询中放置 PACKAGING_ID = 100 的位置感到困惑,因为我只希望它用于 packging_id 100
  • 只需将它添加到where 子句中,就像我在上次编辑中所做的那样。
  • 这个查询没有给出任何结果,如果您删除日期检查,那么它将返回两条记录,电子邮件为 xxx@xxx.com 和 yyy@yyy.com 但我只需要一个 xxx@xxx .com 是最新的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 2022-08-17
  • 2012-07-30
  • 1970-01-01
相关资源
最近更新 更多