当true插入时,mysql查询选择大小写

时间:2010-03-04 08:18:35

标签: mysql select insert case

有人知道如何在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是另一个表中的外键。

2 个答案:

答案 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中执行此操作。