2013-12-23 2 views
0

У меня есть таблица report_business_likes с соответствующими полями:Как обновить значение поля на основе другой таблицы в mySql?

id, facebook_id, created_at, some_info 
-- ----------- ----------- ---------- 
1 123456789 '2013-12-23' blabla 

У меня есть другая таблица с именем businesses с последовавшей структурой:

id, fb_id, data 
-- -----  ---- 
33 123456789 xxx 

Я хочу, чтобы заменить в report_business_likes поле facebook_id с id из таблицы businesses.

В моем случае, результат должен быть:

id, facebook_id, created_at, some_info 
-- ----------- ----------- ---------- 
1 33   '2013-12-23' blabla 

Как вы можете видеть, что я заменил 123456789 с 33.

Как я могу это достичь?

Я пробовал:

UPDATE `report_business_likes` SET facebook_id = BZ.id from 
    (select id from `businesses` where fb_id = 123456789) as BZ, 
    where facebook_id = 123456789 AND date(created_at) = '2013-12-23'; 

Но получить синтаксическую ошибку:

[SQL] /*SELECT * FROM `report_business_likes` where facebook_id = 123456789 AND date(created_at) = '2013-12-23';*/ 

UPDATE `report_business_likes` SET facebook_id = BZ from 
(select id from `businesses` where fb_id = 123456789) as BZ, 
where facebook_id = 123456789AND date(created_at) = '2013-12-23'; 
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from 
(select id from `businesses` where fb_id = 123456789) as BZ,' at line 3 

Пожалуйста, помогите,

+0

Удалить кавычки в именах таблиц и столбцов. – Sergi

+0

отправить сообщение об ошибке – Barranka

+0

@Barranka Я отправил (а) сообщение об ошибке, спасибо – snaggs

ответ

4
UPDATE report_business_likes 
    SET facebook_id = (select id 
         from businesses 
         where facebook_id = 123456789) 
WHERE facebook_id = 123456789 AND date(created_at) = '2013-12-23' 

ИЛИ

UPDATE RBL 
SET RBL.facebook_id = B.id 
FROM report_business_likes RBL INNER JOIN businesses B 
ON RBL.facebook_id = B.facebook_id 
2
UPDATE report_business_likes r JOIN businesses b ON r.facebook_id=b.fb_id 
SET r.facebook_id=b.id 
1

Вы пытаетесь смешать синтаксис. Правильный синтаксис для update является:

update `Your table` 
set `Field in yourTable` = `value or expression` 
where `Conditions to filter the data in your table` 

Там нет места в update синтаксис для пункта from.

Конечно, если вы хотите обновить свое поле с помощью подзапроса, вы можете (см. Ответ М.Али).

Пожалуйста, взгляните на reference manual.

1

вы можете попробовать следующим:

Update set sb.facebook_id=b.id from 
report_business _likes rb join business b on r.facebook_id=b.fb_id 
Смежные вопросы