ВСТАВИТЬ, УДАЛИТЬ, ОБНОВИТЬ в одном запросе - PullRequest
0 голосов
/ 13 октября 2011

У меня есть следующая таблица

id  val     match_id    oddname_id    dif
1   1.75    401             1         0.25 //THIS ONE MUST BE DELETED. EXPLAINED BELOW
2   3.30    401             2         -0.20
3   5.00    401             3         0.00
4   1.13    401             4         0.00

Идентификатор - это просто индекс.И первичный ключ oddname_id и match_id вместе.

Я анализирую данные из XML и вот что я должен сделать:

  1. Вставить, если ПЕРВИЧНЫЙ КЛЮЧ НЕ СУЩЕСТВУЕТ.

    Когда у меня есть match_id = 402 и oddname_id = 1, я должен вставить, потому что match_id 402. не существует.

  2. ON DUPLICATE KEY UPDATE.

    Когда у меня match_id = 401 и oddname_id = 1, я должен обновить только val и dif.(dif = разница в значении val и его новом значении.

  3. Я хочу удалить все данные, если ключ не существует

Вот мой запрос; первые два утверждения работают нормально, но я не знаю, как заставить работать 3-е:

INSERT INTO odds 
    (match_id,oddname_id,val) 
VALUES 
    ('401','2','3.3'),
    ('401','3','5.0'),
    ('401','4','1.25'),
ON DUPLICATE KEY 
UPDATE 
    dif = val-VALUES(val), 
    val = VALUES(val);

Я хочу добавить к этому запросу что-то вроде этого:

IF KEY DOESN'T EXISTS DELETE.

в этом примере он должен удалить первую строку:

 id val     match_id    oddname_id    dif
 1  1.75    401             1         0.25

Поскольку у меня нет 401 (match_id) и 1 (oddname_id) в VALUES при вставке.

1 Ответ

0 голосов
/ 13 октября 2011
  1. Импорт данных из файла XML в дополнительной (временной) таблице - вы можете использовать команду LOAD XML в MySQL 5.5.
  2. Удалить записи из таблицы odds, которые не существуют втемператураtable - используйте команду DELETE с командой JOIN.
  3. Вставьте / обновите таблицу odds, используя данные из temp.таблица - используйте команду INSERT ... ON DUPLICATE KEY UPDATE.
...