Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MySQL Update Column from other column in same table [duplicate]

Tags:

mysql

I added a new column, supervisor_id, to a USERS table that I need to populate from the same USERS table:

ID   |  USERNAME  |  SUPERVISOR_USERNAME  |  SUPERVISOR_ID

1    |  jdoe      |  jsmith               | NULL

2    |  jsmith    |  dduck                | NULL

How would I loop through the table to set the supervisor_id = id, like this:

ID   |  USERNAME  |  SUPERVISOR_USERNAME  |  SUPERVISOR_ID

1    |  jdoe      |  jsmith               |  2

2    |  jsmith    |  dduck                | NULL

I tried the following, but it obviously only set the supervisor_id where the user's supervisor_username was his own username.

update users
set supervisor_id = id
where supervisor_username = username
like image 271
Katie M Avatar asked Jul 16 '13 18:07

Katie M


People also ask

How update a column value with another column in the same table in MySQL?

The syntax to modify a column in a table in MySQL (using the ALTER TABLE statement) is: ALTER TABLE table_name MODIFY column_name column_definition [ FIRST | AFTER column_name ]; table_name. The name of the table to modify.

How do I copy a column in another column in MySQL?

To copy column definitions from one table to another. Open the table with columns you want to copy and the one you want to copy into by right-clicking the tables, and then clicking Design. Click the tab for the table with the columns you want to copy and select those columns. From the Edit menu, click Copy.

How do I update two columns in one query in MySQL?

MySQL UPDATE command can be used to update multiple columns by specifying a comma separated list of column_name = new_value. Where column_name is the name of the column to be updated and new_value is the new value with which the column will be updated.

How do I transfer data from one column to another in MySQL?

How do I copy data from one column to another column in SQL? UPDATE table SET columnB = columnA; This will update every row. This will also work if you want to transfer old value to other column and update the first one: UPDATE table SET columnA = 'new value', columnB = columnA .


2 Answers

You can make a self-join with the multiple table UPDATE syntax:

UPDATE users u
  JOIN users s ON s.SUPERVISOR_USERNAME = u.USERNAME
SET    u.SUPERVISOR_ID = s.ID

See it on sqlfiddle.

You should then drop your SUPERVISOR_NAME column, which violates 3NF; instead, you can make another self-join when you retrieve the data if so desired:

SELECT u.ID, u.USERNAME, s.USERNAME AS SUPERVISOR_USERNAME, u.SUPERVISOR_ID
FROM   users u LEFT JOIN users s ON s.ID = u.SUPERVISOR_ID

See it on sqlfiddle.

like image 186
eggyal Avatar answered Feb 07 '23 03:02

eggyal


update Users u
inner join Users temp on
    u.Supervisor_username = temp.UserName
set u.Supervisor_ID = temp.ID
like image 44
Pakk Avatar answered Feb 07 '23 01:02

Pakk