如何通过使用仅使用DB2获取第一行来使用Select和Order插入表

时间:2014-08-18 06:05:05

标签: insert db2 sql-order-by fetch

我正在使用DB2 V7.2 Express-C for Windows,需要在表中插入一定数量的行作为另一个表中的select。 我不确定,如果这是我的旧DB2版本的问题,或者我的声明存在一般问题。 所以我正在寻找替代方案。

任务是在表markierung中插入一组id,该表由2列定义为

  

IDUSER INTEGER不为空   IDBILD INTEGER不为空

直接向前是插入其他表格中的所有相应项目,例如

insert into markierung 
    select distinct 
       xuser.id as userid, xbild.id as bildid   
    from 
       user xuser, bild xbild, logbook xlogbook
    where 
       xbild.id = xlogbook.oid and xuser.id = xlogbook.userid 

这种方法工作正常,但我想只插入一定数量的行(最新的行)。 因此,我想做这样的事情:

insert into markierung 
    select distinct 
       xuser.id as userid, xbild.id as bildid, xlogbook.date as date   
    from 
       user xuser, bild xbild, logbook xlogbook
    where 
       xbild.id = xlogbook.oid and xuser.id = xlogbook.userid 
  order by date desc fetch first 5 rows only;

第一个问题:我需要将日期添加到选择中以便与订单一起使用 因为我想插入5个最新的行。但插入只允许2列 我更改了查询

select userid, bildid from
(
    select distinct 
       xuser.id as userid, xbild.id as bildid, xlogbook.date as date   
    from 
       user xuser, bild xbild, logbook xlogbook
    where 
       xbild.id = xlogbook.oid and xuser.id = xlogbook.userid 
) as xxx order by date desc fetch first 5 rows only;

select语句正常工作 但是当我尝试将所选结果插入表markierung时,我收到一个错误: 我正在使用这个声明:

insert into markierung 
select userid, bildid from
(
    select distinct 
       xuser.id as userid, xbild.id as bildid, xlogbook.date as date   
    from 
       user xuser, bild xbild, logbook xlogbook
    where 
       xbild.id = xlogbook.oid and xuser.id = xlogbook.userid 
) as xxx order by date desc fetch first 5 rows only;

这是错误:

  

SQL0104N在“BEGIN-OF-STATEMENT”意外令牌“插入   markierung select userid,“。可能的标记是:”“。   SQLSTATE = 42601

你有什么想法,我怎么只能在markierung中插入5行? 是否有替代方法或替代查询插入?

0 个答案:

没有答案