没有存储过程,仅在单个查询中
SELECT CASE
WHEN COUNT(v.value) = 0 THEN (
INSERT INTO tbl_v (fid, uid, VALUE)
SELECT fid, 1 AS uid, 'xxxxxx' AS VALUE FROM tbl_f
WHERE category = 'categoryname' AND NAME = 'somevalue'
)WHEN v.value <> 'test' THEN (
'update syntax here' /* will be similar like insert statement above */
)ELSE (
v.value
)END
FROM shared_tbl_f f
INNER JOIN tbl_v v ON f.fid = v.fid
WHERE v.uid = 1 AND f.category = 'categoryname' AND f.name = 'somevalue'
注意:
tbl_v
上没有主键
tbl_v
的唯一引用只是列fid和列uid的组合。
因为tbl_v
是一个映射表(那里没有主键) - fid和uid是另一个表中的外键。
答案 0 :(得分:1)
您可以在插入语句中使用ON DUPLICATE KEY UPDATE
子句。
INSERT INTO tbl_v (fid, uid, VALUE)
SELECT fid, 1 AS uid, 'xxxxxx' AS VALUE FROM tbl_f
WHERE category = 'categoryname' AND NAME = 'somevalue'
ON DUPLICATE KEY UPDATE
value = ?;
要使其工作,他们需要成为列的主键或唯一索引。然后,重复值将启动语句的更新部分。
参考:http://dev.mysql.com/doc/refman/5.5/en/insert-select.html
答案 1 :(得分:0)
你不能,抱歉。您必须在存储过程或applicationlogic中执行此操作。