sql >> Database >  >> RDS >> Mysql

U kunt de doeltabel voor update niet specificeren in de FROM-component

Het probleem is dat MySQL, om wat voor idiote reden dan ook, je niet toestaat om vragen als deze te schrijven:

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

Dat wil zeggen, als u een UPDATE . doet /INSERT /DELETE op een tafel, kunt u niet naar die tabel verwijzen in een innerlijke query (u kunt echter verwijzen naar een veld uit die buitenste tabel...)

De oplossing is om de instantie van myTable . te vervangen in de subquery met (SELECT * FROM myTable) , zoals dit

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

Dit zorgt er blijkbaar voor dat de benodigde velden impliciet worden gekopieerd naar een tijdelijke tabel, dus het is toegestaan.

Ik vond deze oplossing hier . Een opmerking uit dat artikel:

Je wilt niet gewoon SELECT * FROM table in de subquery in het echte leven; Ik wilde de voorbeelden eenvoudig houden. In werkelijkheid zou je alleen de kolommen moeten selecteren die je nodig hebt in die binnenste zoekopdracht, en een goede WHERE toevoegen. clausule om de resultaten ook te beperken.



  1. Hoe een IPv6-compatibel adres op te slaan in een relationele database

  2. Hoe een externe MySQL-verbinding in te stellen

  3. Wat is de juiste JDBC URL-syntaxis als Oracle-wallets worden gebruikt?

  4. hoe rijNum-achtige kolom in sqlite IPHONE te krijgen