Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL Używasz bezpiecznego trybu aktualizacji i próbowałeś zaktualizować tabelę bez opcji GDZIE

Wygląda na to, że MySQL 5.6 ma ograniczone możliwości wykonywania UPDATE oświadczenie wraz z JOIN

Więc zamiast

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

Będziesz musiał napisać tyle zapytań, ile potrzeba, takich jak:

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

Jest to dość denerwujące podczas pisania, można użyć dynamicznego SQL do tworzenia zapytań aktualizujących :

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;

Na przykład :

Schemat (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');

Zapytanie nr 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;

To wyprowadza :

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

Dane wyjściowe można teraz wykorzystać do ręcznie zaktualizuj różne wiersze

Wyświetl na 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. Nie można znaleźć modułu `mysql` node.js

  2. Python:Jak uzyskać czas z obiektu datetime.timedelta?

  3. Jak połączyć się z bazą danych MySQL lub MariaDB

  4. Jak nadać każdemu zarejestrowanemu użytkownikowi własny adres URL za pomocą PHP?

  5. MySQL Sum() wiele kolumn