テーブル - config があります。スキーマ:config_name | config_value
そして、1回のクエリで複数のレコードを更新したいと思います。私はそのようにします:
UPDATE config
SET t1.config_value = 'value'
, t2.config_value = 'value2'
WHERE t1.config_name = 'name1'
AND t2.config_name = 'name2';
しかし、そのクエリは間違っています:(
手伝って頂けますか?
複数テーブルの更新構文を試してください
UPDATE config t1 JOIN config t2
ON t1.config_name = 'name1' AND t2.config_name = 'name2'
SET t1.config_value = 'value',
t2.config_value = 'value2';
これはSQLFiddledemoです。
または条件付き更新
UPDATE config
SET config_value = CASE config_name
WHEN 'name1' THEN 'value'
WHEN 'name2' THEN 'value2'
ELSE config_value
END
WHERE config_name IN('name1', 'name2');
これはSQLFiddledemoです。
以下のようにINSERTでそれを達成することができます:
INSERT INTO mytable (id, a, b, c)
VALUES (1, 'a1', 'b1', 'c1'),
(2, 'a2', 'b2', 'c2'),
(3, 'a3', 'b3', 'c3'),
(4, 'a4', 'b4', 'c4'),
(5, 'a5', 'b5', 'c5'),
(6, 'a6', 'b6', 'c6')
ON DUPLICATE KEY UPDATE id=VALUES(id),
a=VALUES(a),
b=VALUES(b),
c=VALUES(c);
これは新しい値をテーブルに挿入しますが、主キーが重複している(すでにテーブルに挿入されている)場合、指定した値は更新され、同じレコードは2回挿入されません。
私の場合は、これを好むたびにupdateクエリを押すのではなく、1000を超えるレコードを更新する必要があります。
UPDATE mst_users
SET base_id = CASE user_id
WHEN 78 THEN 999
WHEN 77 THEN 88
ELSE base_id END WHERE user_id IN(78, 77)
78、77はユーザーIDであり、それらのユーザーIDに対してそれぞれbase_idを999と88に更新する必要があります。
おそらく誰かにとってそれは役に立つでしょう
postgresql 9.5はチャームとして動作します
INSERT INTO tabelname(id, col2, col3, col4)
VALUES
(1, 1, 1, 'text for col4'),
(DEFAULT,1,4,'another text for col4')
ON CONFLICT (id) DO UPDATE SET
col2 = EXCLUDED.col2,
col3 = EXCLUDED.col3,
col4 = EXCLUDED.col4
このSQLは既存のレコードを更新し、新しいものがあれば挿入します(2 in 1)
すべての列のすべてのレコードを更新したい場合は、以下のコードを実行してください。
update config set column1='value',column2='value'...columnN='value';
特定の行のすべての列を更新したい場合は、以下のコードを実行します。
update config set column1='value',column2='value'...columnN='value' where column1='value'
Camilleの解決策はうまくいった。それを基本的なPHP関数に変えました。そして、それはSQLステートメントを書き上げます。これが他の人に役立つことを願っています。
function _bulk_sql_update_query($table, $array)
{
/*
* Example:
INSERT INTO mytable (id, a, b, c)
VALUES (1, 'a1', 'b1', 'c1'),
(2, 'a2', 'b2', 'c2'),
(3, 'a3', 'b3', 'c3'),
(4, 'a4', 'b4', 'c4'),
(5, 'a5', 'b5', 'c5'),
(6, 'a6', 'b6', 'c6')
ON DUPLICATE KEY UPDATE id=VALUES(id),
a=VALUES(a),
b=VALUES(b),
c=VALUES(c);
*/
$sql = "";
$columns = array_keys($array[0]);
$columns_as_string = implode(', ', $columns);
$sql .= "
INSERT INTO $table
(" . $columns_as_string . ")
VALUES ";
$len = count($array);
foreach ($array as $index => $values) {
$sql .= '("';
$sql .= implode('", "', $array[$index]) . "\"";
$sql .= ')';
$sql .= ($index == $len - 1) ? "" : ", \n";
}
$sql .= "\nON DUPLICATE KEY UPDATE \n";
$len = count($columns);
foreach ($columns as $index => $column) {
$sql .= "$column=VALUES($column)";
$sql .= ($index == $len - 1) ? "" : ", \n";
}
$sql .= ";";
return $sql;
}
これの代わりに
UPDATE staff SET salary = 1200 WHERE name = 'Bob';
UPDATE staff SET salary = 1200 WHERE name = 'Jane';
UPDATE staff SET salary = 1200 WHERE name = 'Frank';
UPDATE staff SET salary = 1200 WHERE name = 'Susan';
UPDATE staff SET salary = 1200 WHERE name = 'John';
あなたが使用することができます
UPDATE staff SET salary = 1200 WHERE name IN ('Bob', 'Frank', 'John');
config_value 列 A1 および config_name in B1 でExcelスプレッドシートの更新する値の一覧があると仮定すると、Excel式を使用して簡単にクエリを記述できます。好き
=CONCAT("UPDATE config SET config_value = ","'",A1,"'", " WHERE config_name = ","'",B1,"'")