mySql multiple tables update MySQL Workbench [дубликат]

Это помогло мне понять всю проблему:

  1. https://stackoverflow.com/a/20074634/1066234
  2. https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

И в следующем примере проблемного запроса.

Проблемный:

SELECT COUNT(*) as attempts, SUM(elapsed) as elapsedtotal, userid, timestamp, questionid, answerid, SUM(correct) as correct, elapsed, ipaddress FROM `gameplay`
                        WHERE timestamp >= DATE_SUB(NOW(), INTERVAL 1 DAY)
                        AND cookieid = #

Решено путем добавления этого в конец:

  GROUP BY timestamp, userid, cookieid, questionid, answerid, elapsed, ipaddress

Примечание: см. сообщение об ошибке в PHP , он сообщает вам, где проблема.

Пример:

Ошибка запроса MySQL 1140: в агрегированном запросе без GROUP BY выражение # 4 списка SELECT содержит неагрегированный столбец ' db.gameplay.timestamp '; это несовместимо с sql_mode = only_full_group_by - Query: SELECT COUNT (*) в качестве попыток, SUM (истек) как elapsedtotal, userid, timestamp, questionid, answerid, SUM (правильный) как правильный, истекший, ipaddress FROM gameplay WHERE timestamp> = DATE_SUB (NOW (), INTERVAL 1 DAY) И userid = 1

blockquote>

В этом случае выражение # 4 отсутствовало в GROUP BY.

92
задан Ryan Kohn 17 January 2013 в 22:07
поделиться

6 ответов

Вы можете сделать это с помощью хранимой процедуры, объединив операторы UPDATE в одной транзакции.

-17
ответ дан Ryan Kohn 23 August 2018 в 17:53
поделиться

Когда вы говорите несколько запросов, вы имеете в виду несколько операторов SQL, например:

UPDATE table1 SET a=b WHERE c;
UPDATE table2 SET a=b WHERE d;
UPDATE table3 SET a=b WHERE e;

Или несколько вызовов функций запроса, как в:

mySqlQuery(UPDATE table1 SET a=b WHERE c;)
mySqlQuery(UPDATE table2 SET a=b WHERE d;)
mySqlQuery(UPDATE table3 SET a=b WHERE e;)

сделанный с помощью одного вызова mySqlQuery, если это то, чего вы хотели достичь, просто вызовите функцию mySqlQuery следующим образом:

mySqlQuery(UPDATE table1 SET a=b WHERE c; UPDATE table2 SET a=b WHERE d; UPDATE table3 SET a=b WHERE e;)

Это выполнит все три запроса одним вызовом mySqlQuery ().

1
ответ дан code_burgar 23 August 2018 в 17:53
поделиться

Вы также можете сделать это с помощью одного запроса, используя соединение так:

UPDATE table1,table2 SET table1.col=a,table2.col2=b
WHERE items.id=month.id;

И тогда просто отправьте этот один запрос, конечно. Вы можете узнать больше о объединениях здесь: http://dev.mysql.com/doc/refman/5.0/ru/join.html . Также есть несколько ограничений для заказа и ограничения на несколько обновлений таблиц, которые вы можете прочитать здесь: http://dev.mysql.com/doc/refman/5.0/en/update.html (просто ctrl + f "join").

30
ответ дан Stephen Searles 23 August 2018 в 17:53
поделиться

Обычно это хранимые процедуры: для реализации нескольких операторов SQL в последовательности. Используя откаты, вы можете убедиться, что они рассматриваются как одна единица работы, то есть либо все они выполнены, либо ни одна из них не поддерживает согласование данных.

0
ответ дан SteveCav 23 August 2018 в 17:53
поделиться

Возьмем случай с двумя таблицами, Books и Orders. В случае увеличения количества книг в определенном порядке с Order.ID = 1002 в таблице Orders, нам также необходимо уменьшить, что общее количество книг, доступных в нашем запасе, одинаковым числом в таблице Books.

UPDATE Books, Orders
SET Orders.Quantity=Orders.Quantity+2,
Books.InStock=Books.InStock-2
WHERE Books.BookID=Orders.BookID
 AND Orders.OrderID = 1002;
374
ответ дан Tikas Mamed 23 August 2018 в 17:53
поделиться
UPDATE t1
INNER JOIN t2 ON t2.t1_id = t1.id
INNER JOIN t3 ON t2.t3_id = t3.id
SET t1.a = 'something',
    t2.b = 42,
    t3.c = t2.c
WHERE t1.a = 'blah';

Чтобы узнать, что он собирается обновить, вы можете преобразовать это в оператор select, например :

SELECT t2.t1_id, t2.t3_id, t1.a, t2.b, t2.c AS t2_c, t3.c AS t3_c
FROM t1
INNER JOIN t2 ON t2.t1_id = t1.id
INNER JOIN t3 ON t2.t3_id = t3.id
WHERE t1.a = 'blah';
36
ответ дан Wodin 23 August 2018 в 17:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: