MySQL: вставить данные в таблицу, некоторые данные поступают из другой таблицы (реляционной)

Я хочу запустить следующие два запроса в одном:

SELECT id FROM user_settings WHERE ......
$id = id_from_query_above();
$value = 100; // this could be anything
INSERT INTO user_config (sid, value) VALUES($id, $value) ON DUPLICATE KEY UPDATE value=$value

(обратите внимание, что я хочу обновить, если уже вставлена ​​строка, связанная с первичным ключом).


person Keir Simmons    schedule 18.07.2014    source источник


Ответы (1)


Вам нужен синтаксис insert . . . select:

INSERT INTO user_config(sid, value)
    SELECT id, $value
    FROM user_settings
    WHERE ......
    ON DUPLICATE KEY UPDATE value = $value;
person Gordon Linoff    schedule 18.07.2014
comment
Это сработало отлично, спасибо - я не знал, что могу использовать оператор SELECT со строками, не входящими в таблицу (т.е. $value). Можно ли сделать что-то подобное с несколькими вставками/обновлениями? - person Keir Simmons; 18.07.2014
comment
Это сделает несколько вставок. Не знаю, в чем вопрос по обновлениям, но подзапросы разрешены и в update запросах. - person Gordon Linoff; 18.07.2014
comment
Я имел в виду обновления, если строка была вставлена. Не могли бы вы привести пример, где этот запрос может вставить 2 строки? - person Keir Simmons; 18.07.2014
comment
@КейрСиммонс. . . Это пример. select может возвращать несколько строк. - person Gordon Linoff; 18.07.2014
comment
А как насчет значения $value (поскольку оно будет разным для каждой вставки)? - person Keir Simmons; 18.07.2014
comment
@КейрСиммонс. . . Вам нужен какой-то способ установить это. Это было бы константой. Возможно, вам следует задать другой вопрос, это немного далеко от этого вопроса. - person Gordon Linoff; 18.07.2014
comment
Хм, хорошо, я сейчас создам вопрос, спасибо за вашу помощь :). - person Keir Simmons; 18.07.2014