2013-11-26 4 views
1

У меня есть две таблицы tb1 & tb2 Мне нужно обновить общий столбец обеих таблиц, то есть user_level У меня есть общие критерии для обеих таблиц, таких как имя пользователя.Как обновить несколько таблиц одним запросом mysql?

Так что я хочу, чтобы обновить как это:

UPDATE tb1, tb2 SET user_level=1 WHERE username="Mr.X" 

Но почему-то не работает. Каков был бы правильный запрос mysql для этого?

+1

Когда вы говорите, база данных, на самом деле означает базу данных или таблицу? –

+0

Нет, я сказал это ошибочно. Это будут таблицы. Я обновил свой вопрос – stockBoi

+0

Итак, см. Мой ответ. –

ответ

3

Попробуйте это:

update db1 inner join db2 on db1.username = db2.username 
    set db1.user_level = 1, 
     db2.user_level = 1 
    where db1.username = 'a'; 

Посмотри здесь на скрипке: http://sqlfiddle.com/#!2/ba34ac/1

+0

Я не хочу использовать внутреннее соединение в этом случае – stockBoi

+0

DB1 обновление, db2 набор db1.user_level = 1, db2.user_level = 1 где db1.username = 'а' и db1.username = db2.username; –

+0

Tin Tran вы уверены, что ваш код в порядке? Я спрашиваю, потому что небольшая ошибка может вызвать серьезную проблему безопасности моего сайта при реализации кода. Если это нормально и правильно, я думаю, что это лучший и упрощенный код. – stockBoi

4

Ваша проблема решена, просто следить за этим, что у меня есть done-

создать таблицу ТВ1 (user_level INT); создать таблицу tb2 (user_level int, имя пользователя varchar (20));

Вставить в значения tb1 (2); Вставить в значения tb2 (2, 'Mr.X');

У меня эти две таблицы, как это, где user_level является общим, теперь, согласно вам, я попытался обновить столбец user_level в обеих таблицах, используя один запрос по общим критериям для имени таблицы i.e.

Я пытался обновить значение столбца user_level от 2 до 3 в обеих таблицах, где имя пользователя является «Mr.X» с помощью одного запроса, поэтому я попытался следующий запрос и он отлично работал ..

  update tb1 inner join tb2 

      on tb1.user_level=tb2.user_level 

       set tb1.user_level=3, 

        tb2.user_level=3 

      where tb2.username='Mr.X' ; 
+0

Вы правы Абхик, необходимо использовать внутреннее соединение. –

4

Попробуйте это:

UPDATE table_1 tb1, 
     table_2 tb2, 
     table_3 tb3 
SET tb1.field2 = "some value", 
     tb2.field3 = "some other value", 
     tb3.field4 = "some another value" 
WHERE tb1.field1 = tb2.field1 
     AND tb1.field1 = tb3.field1 
     AND tb1.field1 = "value" 

Я тестировал код на MSAccess и SQL SERVER 2008

+7

Попробуйте форматировать свой код в будущем. На этот раз я позаботился об этом. Также попробуйте добавить объяснение, только код-код может не помочь никому, кто ищет ответ на этот вопрос в будущем. –

+0

Это работает отлично. Я имею тенденцию использовать AS, например. table_1 AS tb1 и т. д. Это также работает с MySQL. –

0

Мы можем обновить его без присоединиться как этот

UPDATE table1 T1, table2 T2 
SET T1.status = 1 ,T2.status = 1 
WHERE T1.id = T2.tab1_id and T1.id = 1 

Мы можем обновить его с присоединиться как этот

UPDATE table1 
INNER join table2 on table1.id=table2.tab1_id 
SET table1.status=3,table2.status=3 
WHERE table1.id=1 
1

Правильный запрос, что вы должны указать полную таблицу и строку/столбец, который вы пытаетесь обновить в двух таблицах и в самом деле базы данных, если вы также обновляете базы данных.

типичный пример:

UPDATE tb1, tb2 SET tb1.username = '$username', tb2.location ='New York'WHERE tb1.userid = '$id' AND tb2.logid = '$logid' 
+0

Спасибо за исправление. С уважением. – Asuquo12

Смежные вопросы