Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyalin Data Dalam Jadual Menggunakan Self-Join?

Bagaimana untuk Menyalin Data Dalam Jadual Menggunakan Self-Join?

Linda Hamilton
Linda Hamiltonasal
2024-11-20 11:29:02886semak imbas

How to Copy Data Within a Table Using Self-Join?

Menyalin Data Dalam Jadual

Dalam pangkalan data hubungan, selalunya berguna untuk menyalin data dari satu baris ke baris lain dalam jadual yang sama. Artikel ini meneroka kaedah untuk mengemas kini nilai baris menggunakan data daripada baris berbeza dalam jadual yang sama.

Pertimbangkan jadual dengan struktur berikut:

ID NAME VALUE
1 Test VALUE1
2 Test2 VALUE2
1 Test2
4 Test
1 Test3 VALUE3

Matlamatnya adalah untuk mengemas kini nilai untuk baris dengan nilai yang tiada dalam lajur "VALUE" dengan mengambil nilai dari baris lain dengan "NAME" yang sama. Output yang dijangkakan:

ID NAME VALUE
1 Test VALUE1
2 Test2 VALUE2
1 Test2 VALUE2
4 Test VALUE1
1 Test3 VALUE3

Penyelesaian melibatkan penyatuan diri. Menggunakan jadual sementara untuk menyimpan hanya baris bukan nol, kami boleh mengemas kini jadual asal:

UPDATE data_table t, (SELECT DISTINCT ID, NAME, VALUE
                        FROM data_table
                       WHERE VALUE IS NOT NULL AND VALUE != '') t1
   SET t.VALUE = t1.VALUE
 WHERE t.ID = t1.ID
   AND t.NAME = t1.NAME

Penjelasan:

  • Subquery (PILIH DISTINCT ID, NAME, VALUE... ) mencipta jadual sementara t1 dengan hanya bukan nol baris.
  • Penyata KEMASKINI kemudian bergabung dengan t dengan t1 pada lajur ID dan NAME.
  • Jika nilai sepadan dan lajur VALUE dalam t adalah batal, ia dikemas kini dengan VALUE yang sepadan daripada t1.

Dikemas kini Pertanyaan:

Penyelesaian yang disediakan boleh diperhalusi untuk mencapai output yang diingini:

UPDATE data_table dt1, data_table dt2 
SET dt1.VALUE = dt2.VALUE 
WHERE dt1.NAME = dt2.NAME AND dt1.VALUE = '' AND dt2.VALUE != '' 

Atas ialah kandungan terperinci Bagaimana untuk Menyalin Data Dalam Jadual Menggunakan Self-Join?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn