Mysql запрос выберите случай, когда истинная вставка - PullRequest
2 голосов
/ 04 марта 2010

Кто-нибудь знает, как сделать этот синтаксис ниже в 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 ]

1 голос
/ 04 марта 2010

Вы можете использовать предложение 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

0 голосов
/ 04 марта 2010

Ты не можешь, прости. Вы должны сделать это в хранимой процедуре или в приложении логики.

...