Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL Използвате безопасен режим на актуализиране и сте се опитали да актуализирате таблица без WHERE

Изглежда, че MySQL 5.6 е ограничен за изпълнение на UPDATE изявление заедно с JOIN

Така че вместо

UPDATE table1 a
INNER JOIN table2 asa
ON a.ID = asa.Table1Id
SET a.ReferenceID = asa.ReferenceID
WHERE a.ID > 0 AND asa.ID > 0

Ще трябва да напишете толкова заявки, колкото е необходимо, като :

UPDATE table1 a
SET a.ReferenceID = <The corresponding value in table 2>
WHERE a.ID = <The corresponding ID>

Тъй като това е доста досадно за въвеждане, човек може да използва динамичен SQL за изграждане на заявки за актуализиране:

SELECT CONCAT('UPDATE table1 a SET a.ReferenceID = ', asa.ReferenceID, ' WHERE a.ID = ', t.ID, ';')
FROM table1 t
INNER JOIN table2 asa
ON t.ID = asa.Table1Id;

В пример:

Схема (MySQL v5.6)

CREATE TABLE test
(
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    foo VARCHAR(255)
);

CREATE TABLE test2
(
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    id_test INT NOT NULL,
    foo VARCHAR(255),
    FOREIGN KEY (id_test) REFERENCES test(id)
);

INSERT INTO test (foo) VALUES ('hello'), ('world');

INSERT INTO test2 (id_test, foo) VALUES (1, 'bar'), (2, 'baz');

Запитване №1

SELECT CONCAT('UPDATE test t SET t.foo = ''', t2.foo, ''' WHERE t.id = ', t.id, ';') AS 'sql query'
FROM test t
INNER JOIN test2 t2
ON t.id = t2.id_test;

Това извежда:

UPDATE test t SET t.foo = 'bar' WHERE t.id = 1;
UPDATE test t SET t.foo = 'baz' WHERE t.id = 2;

Резултатът вече може да се използва за ръчно актуализирайте различните редове

Преглед на DB Fiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL диакритично нечувствително търсене (испански акценти)

  2. Най-бързият начин за намиране на разстояние между две широчини/дълги точки

  3. Вмъкване на PHP float/десетични стойности в MySQL

  4. SQL инжекция, която заобикаля mysql_real_escape_string()

  5. Разграничители в MySQL