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.
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)
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.
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 |
Update multiple rows with different values based on Ids
Something like this
UPDATE TodoSET completedDate = o.otherDateFROM Todo tINNER JOIN (SELECT otherDate, id FROM otherTable) AS o ON t.id = o.id
Update
To join against the query that collects the dates:
UPDATE Todo
SET completedDate = o.min_date
FROM Todo t
JOIN (SELECT Todo.id, MIN(CloudCall.CloudCallHistory.CallStarted) AS min_date
FROM Todo
JOIN CloudCall.CloudCallHistory ON CloudCall.CloudCallHistory.ObjectId = Todo.foreignId
JOIN CloudCall.CloudCallNotebookTypeCategoryLink ON CloudCall.CloudCallNotebookTypeCategoryLink.CategoryCode = CloudCall.CloudCallHistory.CategoryId
JOIN NotebookTypes ON NotebookTypes.NotebookTypeId = CloudCall.CloudCallNotebookTypeCategoryLink.NotebookTypeId
WHERE CloudCall.CloudCallHistory.CallStarted > Todo.foreignDate
AND Todo.completedDate IS NULL
AND Todo.cancelledDate IS NULL
AND NotebookTypes.NotebookFolderId = 175
AND CloudCall.CloudCallHistory.CategoryId != 17427
GROUP BY Todo.id) AS o ON o.id = t.id
Update multiple rows with different values but with one where condition
I found a solution by exporting a data in excel and generating a helper column and then vlookup to update the desired column.
Thanks All :)
Related Topics
Rails 3 Activerecord Query Using Both SQL in and SQL or Operators
How to Properly Add Brackets to SQL Queries with 'Or' and 'And' Clauses by Using Arel
How to Bulk Update Sequence Id Postgresql for All Tables
Why am I Able to Call the Class Method as If It Were an Instance Method Here
Standard SQL Boolean Operator Is VS. Equals (=) Operator
Replacing Null and Empty String Within Select Statement
SQL Server: Replace Invalid Xml Characters from a Varchar(Max) Field
SQL Pulling a Row for Next or Previous Row of a Current Row
Create a Delimitted String from a Query in Db2
What Is "Connect Timeout" in SQL Server Connection String
How to Combine Results of Two Queries into a Single Dataset
Inner Join VS Multiple Table Names in "From"
How to Get the Next Number in a Sequence