UPDATE multiple rows with different values in one query in MySQL
You can do it this way:
UPDATE table_users
SET cod_user = (case when user_role = 'student' then '622057'
when user_role = 'assistant' then '2913659'
when user_role = 'admin' then '6160230'
end),
date = '12082014'
WHERE user_role in ('student', 'assistant', 'admin') AND
cod_office = '17389551';
I don't understand your date format. Dates should be stored in the database using native date and time types.
SQL - Update multiple records in one query
Try either multi-table update syntax
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';
Here is a SQLFiddle demo
or conditional update
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');
Here is a SQLFiddle demo
Multiple Updates in MySQL
Yes, that's possible - you can use INSERT ... ON DUPLICATE KEY UPDATE.
Using your example:
INSERT INTO table (id,Col1,Col2) VALUES (1,1,1),(2,2,3),(3,9,3),(4,10,12)
ON DUPLICATE KEY UPDATE Col1=VALUES(Col1),Col2=VALUES(Col2);
Update multiple rows with different values in a single SQL query
There's a couple of ways to accomplish this decently efficiently.
First -
If possible, you can do some sort of bulk insert to a temporary table. This depends somewhat on your RDBMS/host language, but at worst this can be accomplished with a simple dynamic SQL (using a VALUES()
clause), and then a standard update-from-another-table. Most systems provide utilities for bulk load, though
Second -
And this is somewhat RDBMS dependent as well, you could construct a dynamic update statement. In this case, where the VALUES(...)
clause inside the CTE has been created on-the-fly:
WITH Tmp(id, px, py) AS (VALUES(id1, newsPosX1, newPosY1),
(id2, newsPosX2, newPosY2),
......................... ,
(idN, newsPosXN, newPosYN))
UPDATE TableToUpdate SET posX = (SELECT px
FROM Tmp
WHERE TableToUpdate.id = Tmp.id),
posY = (SELECT py
FROM Tmp
WHERE TableToUpdate.id = Tmp.id)
WHERE id IN (SELECT id
FROM Tmp)
(According to the documentation, this should be valid SQLite syntax, but I can't get it to work in a fiddle)
Update a column in multiple rows to different values in a single query without inserting
If your second dqata a table like here you can join both with the correct ON
clauswe
Schema (MySQL v5.7)
CREATE TABLE t1 (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
column2 INT NOT NULL,
column3 INT NOT NULL);
INSERT INTO t1
VALUES
(1, 1, 10),
(7, 2, 20);
UPDATE t1
JOIN ( SELECT
1 AS id,0 AS col2,2 AS col3 UNION
SELECT 5,0,3 UNiON
SELECT 7,0,4) t2 ON t2.id = t1.id
SET t1.column3 = t2.col3;
Query #1
SELECT * FROM t1;
id | column2 | column3 |
---|---|---|
1 | 1 | 2 |
7 | 2 | 4 |
SQL update multiple rows with different values where they match a value from a list
You could use a case
expression:
update mytable
set email = case email
when 'OldEmail@1.com' then 'NewEmail@1.com'
when 'OldEmail@2.com' then 'NewEmail@2.com'
end
where email in ('OldEmail@1.com','OldEmail@2.com')
Or better yet, if you have a large list of values, you might create a table to store them (like myref(old_email, new_email)
) and join it in your update query, like so:
update t
set t.email = r.new_email
from mytable t
inner join myref r on r.old_email = t.email
The actual syntax for update/join does vary accross databases - the above SQL Server syntax.
How to update multiple rows in mysql and php with a different values using variables and different files?
I was able to figure out a solution by doing this:
<?php
$servername = "xxxt";
$username = "xxx";
$password = "xxx";
$dbname = "xxx";
$command = $_POST['command'];
$text = $_POST['text'];
$id = $_POST['id'];
$disable = $_POST['disabled'];
$count = count($id);
for ($x = 0; $x <= $count; $x++) {
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "UPDATE dashboard SET Command='$command[$x]', Text='$text[$x]', Disabled='$disable[$x]' WHERE Id='$id[$x]'";
if ($conn->query($sql) === TRUE) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . $conn->error;
}
$conn->close();
}
header("Location: /");
?>
So i decided to do a for loop and count how many inputs i have, so for each input, it automatically creates a new query updating it.
How to update multiple rows on table with the result of a select subquery in Mysql
I don't know what your tables looks like but I'm just assuming that the product
in your inner join product
(given above) is your table2 with columns p.id_product
and p.quantity
and your product_quantity_cart
has columns id_product
, price_product
, c.price
, and c.id_shopping_cart
Then the query could be like this;
update product_quantity_cart c JOIN product p ON p.id_product = c.id_product
set c.price_product = c.price * p.quantity
WHERE c.id_shopping_cart=7
Related Topics
MySQL: Can't Create Table (Errno: 150)
Select Top 10 Records For Each Category
Using Group by on Multiple Columns
If' in 'Select' Statement - Choose Output Value Based on Column Values
How to Select the Newest Four Items Per Category
How to Update Two Tables in One Statement in SQL Server 2005
Return Row With the Max Value of One Column Per Group
Querying Spark SQL Dataframe With Complex Types
When Should I Use Cross Apply Over Inner Join
Equivalent of Limit and Offset For SQL Server
Postgresql Group_Concat Equivalent