MySQL UPDATE query berdasarkan Query SELECT

Saya perlu memeriksa (dari tabel yang sama) jika ada asosiasi antara dua peristiwa berdasarkan tanggal-waktu.

Satu set data akan berisi berakhir pada tanggal-waktu dari peristiwa-peristiwa tertentu dan lain set data akan berisi tanggal mulai-waktu untuk acara-acara lainnya.

Jika acara pertama selesai sebelum acara kedua maka saya ingin menghubungkan mereka.

Apa yang saya miliki sejauh ini adalah:

SELECT name as name_A, date-time as end_DTS, id as id_A 
FROM tableA WHERE criteria = 1

SELECT name as name_B, date-time as start_DTS, id as id_B 
FROM tableA WHERE criteria = 2

Kemudian saya bergabung dengan mereka:

SELECT name_A, name_B, id_A, id_B, 
if(start_DTS > end_DTS,'VALID','') as validation_check
FROM tableA
LEFT JOIN tableB ON name_A = name_B

Dapat saya kemudian, berdasarkan validation_check lapangan, menjalankan UPDATE query dengan MEMILIH bersarang?

Mengomentari pertanyaan (1)
Larutan

Anda dapat benar-benar melakukan ini salah satu dari dua cara:

MySQL update bergabung dengan sintaks:

UPDATE tableA a
INNER JOIN tableB b ON a.name_a = b.name_b
SET validation_check = if(start_dts > end_dts, 'VALID', '')
-- where clause can go here

ANSI SQL sintaks:

UPDATE tableA SET validation_check = 
    (SELECT if(start_DTS > end_DTS, 'VALID', '') AS validation_check
        FROM tableA
        INNER JOIN tableB ON name_A = name_B
        WHERE id_A = tableA.id_A)

Memilih mana yang tampaknya paling alami untuk anda.

Komentar (8)
UPDATE
    `table1` AS `dest`,
    (
        SELECT
            *
        FROM
            `table2`
        WHERE
            `id` = x
    ) AS `src`
SET
    `dest`.`col1` = `src`.`col1`
WHERE
    `dest`.`id` = x
;

Harapan ini bekerja untuk anda.

Komentar (3)

Mudah di MySQL:

UPDATE users AS U1, users AS U2 
SET U1.name_one = U2.name_colX
WHERE U2.user_id = U1.user_id
Komentar (0)

Jika seseorang berusaha untuk meng-update data dari satu database ke yang lain tidak peduli meja yang mereka targetkan, harus ada beberapa kriteria untuk melakukannya.

Yang satu ini adalah yang lebih baik dan bersih untuk semua tingkatan:

UPDATE dbname1.content targetTable

LEFT JOIN dbname2.someothertable sourceTable ON
    targetTable.compare_field= sourceTable.compare_field
SET
    targetTable.col1  = sourceTable.cola,
    targetTable.col2 = sourceTable.colb, 
    targetTable.col3 = sourceTable.colc, 
    targetTable.col4 = sourceTable.cold 

Traaa! Ia bekerja besar!

Dengan pengertian di atas, anda dapat memodifikasi mengatur bidang dan "on" kriteria untuk melakukan pekerjaan anda. Anda juga dapat melakukan pemeriksaan, kemudian menarik data ke dalam tabel temp(s) dan kemudian menjalankan pembaruan menggunakan sintaks di atas mengganti tabel dan nama kolom.

Harapan itu bekerja, jika tidak biarkan aku tahu. Saya akan menulis yang tepat query untuk anda.

Komentar (0)
UPDATE 
  receipt_invoices dest,
  (
    SELECT 
      `receipt_id`,
      CAST((net * 100) / 112 AS DECIMAL (11, 2)) witoutvat 
    FROM
      receipt 
    WHERE CAST((net * 100) / 112 AS DECIMAL (11, 2)) != total 
      AND vat_percentage = 12
  ) src 
SET
  dest.price = src.witoutvat,
  dest.amount = src.witoutvat 
WHERE col_tobefixed = 1 
  AND dest.`receipt_id` = src.receipt_id ;

Berharap ini akan membantu anda dalam kasus di mana anda harus mencocokkan dan update antara dua tabel.

Komentar (0)

Saya menemukan pertanyaan ini dalam mencari sendiri solusi yang sangat kompleks bergabung. Ini adalah sebuah alternatif solusi, untuk versi yang lebih kompleks dari masalah, yang saya pikir mungkin berguna.

Aku yang dibutuhkan untuk mengisi product_id lapangan dalam kegiatan tabel, di mana kegiatan berjumlah satu unit, dan unit bernomor di tingkat (diidentifikasi dengan menggunakan string ??N), seperti yang satu dapat mengidentifikasi kegiatan yang menggunakan SKU yaitu L1U1A1. Mereka Sku kemudian disimpan dalam tabel yang berbeda.

Aku diidentifikasi berikut untuk mendapatkan daftar activity_id vs product_id:-

SELECT a.activity_id, w.product_id 
  FROM activities a 
  JOIN units USING(unit_id) 
  JOIN product_types USING(product_type_id) 
  JOIN web_products w 
    ON sku=CONCAT('L',SUBSTR(product_type_code,3), 'U',unit_index, 'A',activity_index)

Saya menemukan bahwa itu terlalu kompleks untuk memasukkan ke PILIH dalam mysql, jadi saya membuat sebuah tabel sementara, dan bergabung dengan pernyataan update:-

CREATE TEMPORARY TABLE activity_product_ids AS ();

UPDATE activities a
  JOIN activity_product_ids b
    ON a.activity_id=b.activity_id 
  SET a.product_id=b.product_id;

Saya berharap seseorang menemukan ini berguna

Komentar (1)
UPDATE [table_name] AS T1,
      (SELECT [column_name] 
        FROM [table_name] 
        WHERE [column_name] = [value]) AS T2 
  SET T1.[column_name]=T2.[column_name] + 1
WHERE T1.[column_name] = [value];
Komentar (0)

Anda dapat memperbarui nilai-nilai dari tabel lain menggunakan inner join sama

UPDATE [table1_name] AS t1 INNER JOIN [table2_name] AS t2 ON t1.column1_name] = t2.[column1_name] SET t1.[column2_name] = t2.column2_name];

Ikuti di sini untuk tahu bagaimana menggunakan query ini http://www.voidtricks.com/mysql-inner-join-update/

atau anda dapat menggunakan pilih sebagai subquery untuk melakukan hal ini

UPDATE [table_name] SET [column_name] = (SELECT [column_name] FROM [table_name] WHERE [column_name] = [value]) WHERE [column_name] = [value];

query dijelaskan secara detail di sini http://www.voidtricks.com/mysql-update-from-select/

Komentar (0)

Anda dapat menggunakan:

UPDATE Station AS st1, StationOld AS st2
   SET st1.already_used = 1
 WHERE st1.code = st2.code
Komentar (0)

Untuk meja yang sama,

UPDATE PHA_BILL_SEGMENT AS PHA,
     (SELECT BILL_ID, COUNT(REGISTRATION_NUMBER) AS REG 
       FROM PHA_BILL_SEGMENT
        GROUP BY REGISTRATION_NUMBER, BILL_DATE, BILL_AMOUNT
        HAVING REG > 1) T
    SET PHA.BILL_DATE = PHA.BILL_DATE + 2
 WHERE PHA.BILL_ID = T.BILL_ID;
Komentar (0)

Aku punya masalah dengan entri duplikat dalam satu tabel itu sendiri. Di bawah ini adalah pendekatan yang bekerja untuk saya. Hal ini juga telah dianjurkan oleh @sibaz.

Akhirnya aku diselesaikan dengan menggunakan pertanyaan di bawah ini:

  1. Pilih query yang disimpan dalam sebuah tabel temp

JIKA OBJECT_ID(N'code..#New_format_donor_temp', N'U') ADALAH TIDAK NOL DROP TABLE #New_format_donor_temp;

pilih * ke #New_format_donor_temp dari DONOR_EMPLOYMENTS di mana DONOR_ID DI ( 1, 2 )

  • Uji New_format_donor_temp
  • PILIH *
  • DARI #New_format_donor_temp;
  1. Temp table bergabung di update query.

UPDATE de SET STATUS_CD=de_new.STATUS_CD, STATUS_REASON_CD=de_new.STATUS_REASON_CD, TYPE_CD=de_new.TYPE_CD DARI DONOR_EMPLOYMENTS SEBAGAI de INNER JOIN #New_format_donor_temp SEBAGAI de_new PADA de_new.EMP_NO = de.EMP_NO MANA de.DONOR_ID DI ( 3, 4 )

Aku tidak berpengalaman dengan SQL mohon saran apapun pendekatan yang lebih baik, anda tahu.

Di atas query pada MySql server.

Komentar (0)

Periksa dengan query di bawah ini.

update tableA Yang inner join tableB B on A. name_a = B. name_b set validation_check = if(start_dts > end_dts, 'yang masih BERLAKU', '')

Komentar (0)