sql >> Databasteknik >  >> RDS >> Mysql

MySQL Du använder säkert uppdateringsläge och du försökte uppdatera en tabell utan en WHERE

Det verkar som att MySQL 5.6 är begränsad till att köra en UPDATE uttalande tillsammans med en JOIN

Så istället för

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

Du måste skriva så många frågor som behövs som :

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

Detta är ganska irriterande att skriva, man kan använda dynamisk SQL för att bygga uppdateringsfrågorna:

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;

I exempel:

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

Fråga #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;

Detta ger :

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

Utdata kan nu användas för att manuellt uppdatera de olika raderna

Visa på DB Fiddle



  1. Hur håller man en enda SQL Server-anslutningsinstans öppen för flera begäranden i C#?

  2. Juli 2016 PSU misslyckas med att göra isqora

  3. hur man konfigurerar hibernate-konfigurationsfilen för sql-servern

  4. Få tillgång till experternas syn på 2020 MVP Summit