简体   繁体   中英

How to update fields form a select statement in MySql with a WHERE clause?

I am trying to update a field from a select statement. This is my current query

UPDATE phone_cals
SET call_code_id = id, result_code_id = 0, call_subject = title WHERE status = 1
select call_code_id AS id, call_code_title AS title FROM call_codes

I am trying to set

phone_calls.call_code_id = call_codes.call_code_id 
phone_calls.result_code_id = 0
phone_calls.call_subject = call_codes.call_code_title 

WHERE phone_calls.status = 1

Yes I have a syntax error but I am not sure how to fix it

Summery I want to select a random call_codes.call_code_id and assign it = to phone_calls.call_code_id

If I understand your question correctly, I think you need something like this:

UPDATE
  phone_calls,
  (select call_code_id, call_code_title FROM call_codes ORDER BY rand() LIMIT 1) c2
SET
  phone_calls.call_code_id = c2.call_code_id,
  phone_calls.result_code_id = 0,
  phone_calls.call_subject = c2.call_code_title
WHERE
  phone_calls.call_subject = 1

This will update all call_code_id and all call_subject to a random value choosen from call_codes table, where call_subject=1.

Edit

If you need to update each row to a different random value, I think you could use this:

UPDATE
  phone_calls
SET
  call_code_id = (select call_code_id FROM call_codes ORDER BY rand() LIMIT 1),
  result_code_id = 0
WHERE
  phone_calls.call_subject = 1;

UPDATE
  phone_calls INNER JOIN call_codes
  ON phone_calls.call_code_id = call_codes.call_code_id
SET
  phone_calls.call_subject = call_codes.call_code_title
WHERE
  phone_calls.call_subject = 1;

(don't know if it's possible to do it using just one query). It can be slow, but it should work.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM