2

有人知道如何在 mysql 中执行以下语法吗?

没有存储过程,并且仅在单个查询中


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 是另一个表的外键。

4

2 回答 2

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

于 2010-03-04T09:31:13.797 回答
0

你不能,对不起。您必须在存储过程或应用程序逻辑中执行此操作。

于 2010-03-04T09:06:37.437 回答