Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Anda tidak dapat menentukan tabel target untuk pembaruan dalam klausa FROM

Masalahnya adalah MySQL, untuk alasan apa pun yang tidak masuk akal, tidak mengizinkan Anda menulis kueri seperti ini:

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

Yaitu, jika Anda melakukan UPDATE /INSERT /DELETE pada tabel, Anda tidak dapat mereferensikan tabel itu dalam kueri dalam (Anda bisa namun referensi bidang dari tabel luar itu...)

Solusinya adalah mengganti instance myTable di sub-kueri dengan (SELECT * FROM myTable) , seperti ini

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

Hal ini tampaknya menyebabkan bidang yang diperlukan disalin secara implisit ke dalam tabel sementara, sehingga diperbolehkan.

Saya menemukan solusi ini di sini . Catatan dari artikel itu:

Anda tidak ingin hanya SELECT * FROM table dalam subquery dalam kehidupan nyata; Saya hanya ingin membuat contoh sederhana. Pada kenyataannya, Anda seharusnya hanya memilih kolom yang Anda butuhkan dalam kueri terdalam itu, dan menambahkan WHERE yang bagus klausa untuk membatasi hasil juga.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kode Kesalahan:1215. Tidak dapat menambahkan batasan kunci asing (kunci asing)

  2. Menghubungkan ke MySQL Menggunakan Python

  3. Cara Mendapatkan Hari Terakhir Bulan Ini di MySQL

  4. hasil ganda dalam array saya ( mysql_fetch_array )

  5. Cara Menampilkan Susunan Tabel di MySQL