Mysql
 sql >> база данни >  >> RDS >> Mysql

Не можете да посочите целева таблица за актуализиране в клаузата FROM

Проблемът е, че MySQL, по някаква глупава причина, не ви позволява да пишете заявки като това:

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

Тоест, ако правите UPDATE /INSERT /DELETE на таблица, не можете да препратите към тази таблица във вътрешна заявка (можете можете обаче препратете към поле от тази външна таблица...)

Решението е да се замени екземплярът на myTable в подзаявката с (SELECT * FROM myTable) , като това

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

Това очевидно кара необходимите полета да бъдат имплицитно копирани във временна таблица, така че е разрешено.

Намерих това решение тук . Бележка от тази статия:

Не искате просто да SELECT * FROM table в подзаявката в реалния живот; Просто исках да запазя примерите прости. В действителност трябва да избирате само колоните, от които се нуждаете в тази най-вътрешна заявка, и да добавяте добър WHERE клауза за ограничаване на резултатите също.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Codeigniter - множество връзки към база данни

  2. Изтриване на дублиращи се редове от таблица

  3. Как да добавите ненулево ограничение към съществуваща колона в MySQL

  4. Чувствителни ли са имената на колона и таблица в MySQL?

  5. Промяна на десетичния разделител в MySQL