最近写SQL,碰到一个这样的问题,不太会写,问下各位
情景是这样的,现在有A表和A1表,两个表结构一模一样,A1表比如有100条数据,A表有10条数据,现在需要将A1表所有数据搞到A表里去,没有的INSERT进去(90条),这个已经搞定了,如果A表有的,A1表要把这些数据更新进去(10条),UPDATE能不能写出来一条语句,直接将这10条更新掉?我自己写的,不对~~根据主键判断是否更新还是插入,插入好说简单,这个更新,怎么弄呢?我下面的语句,会有单行子查询返回多行的问题~~
UPDATE A
SET (DEALID,
ORDERID,
NAME,
DBCOLUMNNAME,
DATATYPE,
DATALENGTH,
SCALE,
CSID,
ISPRIMARY,
ISRESERVE,
GUID,
STATUS,
DBVERSION,
DEFAULTVALUE,
ISLOGICKEY,
DEID)
=(SELECT DEALID,
ORDERID,
NAME,
DBCOLUMNNAME,
DATATYPE,
DATALENGTH,
SCALE,
CSID,
ISPRIMARY,
ISRESERVE,
GUID,
STATUS,
DBVERSION,
DEFAULTVALUE,
ISLOGICKEY,
DEID
FROM A1
WHERE EXISTS
(SELECT 1
FROM A
WHERE A1.GUID = A.GUID
AND A1.DEALID = A.DEALID))
------解决思路----------------------
你逻辑判断问题,应该是这样:
UPDATE A
SET (DEALID,
ORDERID,
NAME,
DBCOLUMNNAME,
DATATYPE,
DATALENGTH,
SCALE,
CSID,
ISPRIMARY,
ISRESERVE,
GUID,
STATUS,
DBVERSION,
DEFAULTVALUE,
ISLOGICKEY,
DEID)
=(SELECT DEALID,
ORDERID,
NAME,
DBCOLUMNNAME,
DATATYPE,
DATALENGTH,
SCALE,
CSID,
ISPRIMARY,
ISRESERVE,
GUID,
STATUS,
DBVERSION,
DEFAULTVALUE,
ISLOGICKEY,
DEID
FROM A1
WHERE A1.GUID = A.GUID
AND A1.DEALID = A.DEALID
)
WHERE EXISTS
(SELECT 1
FROM A
WHERE A1.GUID = A.GUID
AND A1.DEALID = A.DEALID))