Saya harap itu masuk akal, izinkan saya menjelaskan:
Ada tabel data pelacakan untuk program kuis di mana setiap baris memiliki ..
QuestionID dan AnswerID (masing-masing memiliki tabel). Jadi karena bug ada banyak QuestionID yang disetel ke NULL, tetapi QuestionID dari AnswerID terkait ada di tabel Answers.
Jadi katakanlah QuestionID adalah NULL dan AnswerID adalah 500, jika kita pergi ke tabel Answers dan menemukan AnswerID 500 ada kolom dengan QuestionID yang seharusnya berada di tempat yang memiliki nilai NULL.
Jadi pada dasarnya saya ingin mengatur setiap Kuesioner NULL menjadi sama dengan Kuesioner yang ditemukan di tabel Jawaban pada baris Jawaban dari AnswerID yang ada di tabel pelacakan (baris yang sama dengan Kuesioner NULL yang sedang ditulis).
Bagaimana saya melakukan ini?
UPDATE QuestionTrackings
SET QuestionID = (need some select query that will get the QuestionID from the AnswerID in this row)
WHERE QuestionID is NULL AND ... ?
Tidak yakin bagaimana saya bisa membuatnya menetapkan QuestionID ke QuestionID dari AnswerID yang cocok ...
Jawaban:
Saya sarankan untuk memeriksa apa hasil yang akan diperbarui sebelum menjalankan pembaruan (kueri yang sama, hanya dengan pilihan):
Terutama apakah setiap id jawaban pasti hanya memiliki 1 id pertanyaan terkait.
sumber
update QuestionTrackings q inner join QuestionAnswers a on q.AnswerID = a.AnswerID set q.QuestionID = a.QuestionID;
tampaknya kueri dasar yang sama dalam urutan yang berbeda. tahu kenapa?UPDATE table1 NATURAL JOIN table2 SET table1.col1 = table1.col2 WHERE table2.col3 ="condition"
Tanpa notasi update-and-join (tidak semua DBMS mendukungnya), gunakan:
Seringkali dalam query seperti ini, Anda perlu mengkualifikasi klausa WHERE dengan klausa EXISTS yang berisi sub-query. Ini mencegah UPDATE menginjak-injak baris di mana tidak ada kecocokan (biasanya membatalkan semua nilai). Dalam kasus ini, karena ID pertanyaan yang hilang akan mengubah NULL menjadi NULL, itu tidak masalah.
sumber
Saya tidak tahu apakah Anda mengalami masalah yang sama dengan saya di MySQL Workbench tetapi menjalankan kueri dengan pernyataan
INNER JOIN
setelahFROM
tidak berhasil untuk saya. Saya tidak dapat menjalankan kueri karena program mengeluh tentangFROM
pernyataan tersebut.Jadi untuk membuat kueri berfungsi, saya mengubahnya menjadi
dari pada
Saya kira solusi saya adalah sintaks yang tepat untuk MySQL.
sumber
sumber
Saya mengalami pertanyaan yang sama. Berikut adalah solusi kerja yang mirip dengan eglasius. Saya menggunakan postgresql.
Ia mengeluh jika q digunakan sebagai pengganti nama tabel di baris 1, dan tidak ada yang harus mendahului QuestionID di baris 2.
sumber
sumber
Untuk Mysql Anda dapat menggunakan Query ini
UPDATE tabel1 a, tabel2 b SET a.coloumn = b.coloumn WHERE a.id = b.id
sumber
Perbarui data tabel ke-2 di tabel ke-1 perlu Inner join sebelum SET:
sumber
di bawah ini berfungsi untuk mysql
sumber
Saya pikir ini harus berhasil.
sumber