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 ステートメントで使用できます。

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 に答える