Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle:无法根据插入的最新记录获取记录并与多个表联接_Sql_Oracle_Join_Oracle10g_Left Join - Fatal编程技术网

Sql Oracle:无法根据插入的最新记录获取记录并与多个表联接

Sql Oracle:无法根据插入的最新记录获取记录并与多个表联接,sql,oracle,join,oracle10g,left-join,Sql,Oracle,Join,Oracle10g,Left Join,我有以下表格: USERS USERID EMAIL ---------------------- 1 xxx@xxx.com 2 yyy@yyy.com AUDIT_ITEM AI_ID AI_NAME ---------------------------- 1 AAA 2 BBB 3 CCC 4

我有以下表格:

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'和包装ID=100。注:插入日期为日期类型

这使用
with
子句将日志条目限制为包装id 100和ai名称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);

“插入最后一条记录”的标准是什么?如果是
插入日期
,那么所显示的四条记录没有区别。如果它是最大的
AL_ID
,那么你应该这么说。是的,它的插入日期必须决定哪条记录是最晚的,但是
INSERT_日期在所有四条记录上都是相同的,那么你怎么知道哪一条是最晚的呢?INSERT_日期是DATE类型的,在oracle中它只显示日期,但实际上它也有时间,因此,我们必须在考虑时间戳的基础上确定时间戳,因为您没有考虑AI_NAME='AAA',所以这不起作用,我只想在查询中查找AI_ID=1,我们应该检查像where audit_log.AI_ID=audit_item.AI_ID和audit_item.NAME='AAA'更新以包括项目条件。感谢您的支持,但我对在查询中放置PACKAGING_ID=100感到困惑,因为我只想将其添加到
where
子句中,正如我在上一次编辑中所做的。此查询不会给出任何结果,如果删除日期检查,则它将返回两条记录,其中电子邮件为xxx@xxx.com & yyy@yyy.com但我只需要一个xxx@xxx.com哪个是最新的