sql >> Databasteknik >  >> RDS >> Mysql

Du kan inte ange måltabell för uppdatering i FROM-satsen

Problemet är att MySQL, oavsett sinnessjuk anledning, inte tillåter dig att skriva frågor så här:

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

Det vill säga om du gör en UPDATE /INSERT /DELETE i en tabell kan du inte referera till den tabellen i en inre fråga (du kan men referera till ett fält från den yttre tabellen...)

Lösningen är att ersätta instansen av myTable i underfrågan med (SELECT * FROM myTable) , så här

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

Detta gör tydligen att de nödvändiga fälten implicit kopieras till en temporär tabell, så det är tillåtet.

Jag hittade den här lösningen här . En anteckning från den artikeln:

Du vill inte bara SELECT * FROM table i underfrågan i verkligheten; Jag ville bara hålla exemplen enkla. I verkligheten bör du bara välja de kolumner du behöver i den innersta frågan och lägga till en bra WHERE klausul för att begränsa resultaten också.



  1. MySQL MariaDB – Fråga med hjälp av Temp-tabell

  2. Lär dig hur man skapar formulär i minnet (Ja, du hörde rätt)

  3. Hur man genererar skript för att återskapa främmande nyckelbegränsningar i SQL Server Database - SQL Server / TSQL Tutorial Del 73

  4. Hur man skapar en unik begränsning på kolumn för redan befintlig tabell - SQL Server / TSQL självstudie del 97