2016-09-14 64 views
0

我需要一些数据从一个表复制到另一个:INSERT INTO不工作我选择

有具有正确日期(审计日志),列时间的表,但我需要把它的用户表USERS_DATE,并与正确的用户关联...

SELECT自己返回正确的数据,我有问题使用SELECT INTO语句。我的代码如下:

INSERT INTO users (USERS_DATE) WHERE USERID=U.USERID 
(SELECT U.USERID, 
     javaTimeStampToDate (L.TIME) 
      AS "Last Login" 
    FROM COMPANY C, 
     USERS U, 
     AUDITMAP M, 
     AUDITLOG L 
WHERE  C.COMPANYID = U.COMPANYID 
     AND U.USERID = M.ROWID 
     AND M.AUDITID = L.AUDITID 
     AND C.APPLICATION = 'A' 
     AND L.NOTES LIKE '%went inactive%' 
     AND U.STATUS = 0); 
+0

好像你正在寻找一个加入不是INSERT操作的UPDATE ..... – Matt

+0

1.你列要插入的必须匹配select中的列。 2.行1上的WHERE语句是错误的语法,请将其删除。 3.插入=新数据(新记录),更新=修改现有记录。你确定你想要插入? – Igor

+0

那么表中已经有ID了?如果是这样,你需要一个'update',而不是'insert'。另外 - 你使用了什么[tag:rdbms]? – Mureinik

回答

1

请尝试下面的查询sql服务器。 我认为你需要更新查询。同时改变你的逗号为JOIN的条件。

UPDATE U 
    SET U.USERS_DATE=L.TIME 
    FROM COMPANY C 
     JOIN USERS U ON C.COMPANYID = U.COMPANYID 
     JOIN AUDITMAP M ON U.USERID = M.ROWID 
     JOIN AUDITLOG L ON M.AUDITID = L.AUDITID 
WHERE C.APPLICATION = 'A' 
     AND L.NOTES LIKE '%went inactive%' 
     AND U.STATUS = 0 

使用下面的查询为Oracle,

MERGE INTO USERS U 
USING 
(
    SELECT M.ROWID,L.Time 
    FROM AUDITMAP M 
     JOIN AUDITLOG L ON M.AUDITID = L.AUDITID 
    WHERE L.NOTES LIKE '%went inactive%' 
) Au ON (U.USERID = Au.ROWID) 
WHEN MATCHED THEN UPDATE 
    SET U.USERS_DATE = Au.TIME 
WHERE U.STATUS = 0 AND EXISTS (select 1 
          from COMPANY c 
          where .COMPANYID = U.COMPANYID AND C.APPLICATION = 'A') 
+0

好吧,但是这怎么知道哪个时间与每个用户关联......这就是为什么我选择USERID – user6832291

+0

基于对' SELECT INTO',这是OP使用SQL Server的合理推论。因此,这似乎是正确的。 –

+0

您的表格已经使用所需的连接条件进行了链接。我的意思是'user'表通过'audit map'使用'UserID'和'AUDITID'列连接到'audit log'表。所以这将从'audit log'表中获取每个用户的时间并更新'User'表中的'Users_date'列。 –