将选择语句更改为更新语句

时间:2020-01-09 22:57:37

标签: sql oracle

SELECT A.GRPNO, A.EMPNO, A.DEPNO, A.PENDCD FROM EMPDEP A, EEDPELIG B
WHERE A.GRPNO=B.GRPNO
AND A.EMPNO=B.EMPNO
AND A.DEPNO=B.DEPNO
AND A.GRPNO = 6606 AND A.SPOUSE = 'T'
AND B.ELIGFLAG01 = 'T' AND SNAPTHRUDT ='DEC312999'

我们的选择语句成功提取了所需的信息,但是我们是SQL的新手,正在努力创建一条更新语句,以将“ a.pendcd = 0”替换为“ a.pendcd = 20” select语句中的信息。任何帮助表示赞赏,谢谢。

3 个答案:

答案 0 :(得分:0)

update a
a.pendcd=20
FROM EMPDEP A inner join EEDPELIG B
on A.GRPNO=B.GRPNO
AND A.EMPNO=B.EMPNO
AND A.DEPNO=B.DEPNO
AND A.GRPNO = 6606 AND A.SPOUSE = 'T'
AND B.ELIGFLAG01 = 'T' AND SNAPTHRUDT ='DEC312999'
where a.pendcd=0

答案 1 :(得分:0)

在大多数情况下,Oracle不支持FROM中的JOINUPDATE

只需使用EXISTS

UPDATE EMPDEP ed
    SET  . . .
    WHERE EXISTS (SELECT 1
                  FROM EEDPELIG p
                  WHERE ed.GRPNO = p.GRPNO AND
                        ed.EMPNO= p.EMPNO AND
                        ed.DEPNO= p.DEPNO AND
                        p.ELIGFLAG01 = 'T'
                 )
          ed.GRPNO = 6606 AND
          ed.SPOUSE = 'T' AND
          ed.SNAPTHRUDT ='DEC312999';

不清楚SNAPTHRUDT上的条件是在外部表还是内部表上。如果它位于p上,则将其移至子查询。

答案 2 :(得分:0)

您可以使用MERGE语句,如下所示:

让我们假设EMPDEP表的主键为EMPDEP_UID

MERGE INTO EMPDEP TRG
USING
(SELECT A.EMPDEP_UID, A.PENDCD
   FROM EMPDEP A, EEDPELIG B
  WHERE A.GRPNO=B.GRPNO
    AND A.EMPNO=B.EMPNO
    AND A.DEPNO=B.DEPNO
    AND A.GRPNO = 6606 
    AND A.SPOUSE = 'T'
    AND B.ELIGFLAG01 = 'T' 
    AND SNAPTHRUDT ='DEC312999') SRC
ON (TRG.EMPDEP_UID = SRC.EMPDEP_UID)
WHEN MATCHED THEN
UPDATE SET TRG.PENDCD = 0
WHERE TRG.PENCD = 20;

您可以使用unique keys代替primary key来标识要更新的记录。但是使用primary key是安全的,因为unique key可以包含可以更改查询行为的null。

干杯!