是否可以构建一个首先使用where和join条件进行更新的查询,如果存在更新则插入?

时间:2013-06-21 07:57:59

标签: mysql insert-update

我需要更新一个已与多个表连接的表来提取数据,如果更新失败,则将数据插入新行... 目前我有更新查询

.....

我在想如果上面的查询失败了它应该插入

INSERT INTO ASSET_ASSOCIATION.....

谢谢...

1 个答案:

答案 0 :(得分:0)

无法通过上述有限的详细信息为您提供完整的答案,但正如Loopo所说,您可以使用 INSERT .... ON DUPLICATE KEY UPDATE 。例如,根据您的更新: -

INSERT INTO ASSET_ASSOCIATION(ASSET_ID, ASSOCIATED_ASSET_ID, ASSET_FIELD_ID)
SELECT a.ID, b.ID, 46
FROM ASSET a
INNER JOIN HD_TICKET ON HD_TICKET.CUSTOM_FIELD_VALUE2 = a.NAME
INNER JOIN USER U ON U.ID = HD_TICKET.SUBMITTER_ID
INNER JOIN ASSET b ON U.FULL_NAME LIKE BINARY CONCAT('%',b.NAME,'%') AND b.NAME <> ''
WHERE ASSET.ASSET_TYPE_ID = 5 
AND HD_TICKET.ID = 120
ON DUPLICATE KEY UPDATE ASSOCIATED_ASSET_ID=VALUES(ASSOCIATED_ASSET_ID)

这假设您在asset_id和asset_field_id上拥有唯一键。但是几乎可以肯定你的桌子比这更复杂。