sql >> Database teknologi >  >> RDS >> Mysql

Du kan ikke angive måltabel for opdatering i FROM-klausulen

Problemet er, at MySQL, uanset hvilken vanvittig årsag, ikke tillader dig at skrive forespørgsler som denne:

UPDATE myTable
SET myTable.A =
(
    SELECT B
    FROM myTable
    INNER JOIN ...
)

Det vil sige, hvis du laver en OPDATERING /INDSÆT /SLET på en tabel kan du ikke referere til den tabel i en indre forespørgsel (du kan referer dog til et felt fra den ydre tabel...)

Løsningen er at erstatte forekomsten af ​​myTable i underforespørgslen med (SELECT * FROM myTable) , sådan her

UPDATE myTable
SET myTable.A =
(
    SELECT B
    FROM (SELECT * FROM myTable) AS something
    INNER JOIN ...
)

Dette medfører tilsyneladende, at de nødvendige felter implicit kopieres til en midlertidig tabel, så det er tilladt.

Jeg fandt denne løsning her . En note fra den artikel:

Du vil ikke bare SELECT * FROM table i underforespørgslen i det virkelige liv; Jeg ville bare holde eksemplerne enkle. I virkeligheden bør du kun vælge de kolonner, du har brug for i den inderste forespørgsel, og tilføje en god Hvor klausul for også at begrænse resultaterne.



  1. Udfør lagret procedure fra en funktion

  2. Komprimer en specifik partition i en tabel i SQL Server (T-SQL)

  3. Simuler OPRET DATABASE, HVIS IKKE FINNES for PostgreSQL?

  4. Ingen funktion matcher det angivne navn og argumenttyper