MySQL - interogare de ACTUALIZARE bazate pe Interogare de SELECTARE

Am nevoie pentru a verifica (la aceeasi masa) dacă există o asociere între două evenimente bazate pe data-timp.

Un set de date va conține data de sfârșit în timp a unor evenimente și alte set de date va conține data de începere în timp pentru alte evenimente.

Dacă primul eveniment completează înainte de cel de-al doilea eveniment, atunci aș dori să-i lege.

Ceea ce am pana acum este:

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

Apoi am alăturați-vă-le:

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

Pot apoi, pe baza validation_check domeniu, executați o interogare de ACTUALIZARE cu SELECT imbricate?

Comentarii la întrebare (1)
Soluția

De fapt, puteți face asta în două moduri:

MySQL update se alăture sintaxa:

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 sintaxa:

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)

Alege oricare una pare cel mai natural pentru tine.

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

Sper că acest lucru funcționează pentru tine.

Comentarii (3)

Ușor în MySQL:

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

Dacă cineva este în căutarea de a actualiza datele dintr-o bază de date la alta, indiferent care tabelul acestea sunt de orientare, trebuie să existe niște criterii pentru a face asta.

Acesta este mai bun și curat pentru toate nivelurile:

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! It works mare!

Cu cele de mai sus înțelegere, puteți modifica set de câmpuri și "pe" criterii pentru a face munca ta. Puteți efectua, de asemenea, controale, apoi trage datele în tabel temp(e) și apoi executați actualizare folosind sintaxa de mai sus înlocuind masa și coloana nume.

Sper că funcționează, dacă nu lasă-mă să știu. Voi scrie exact interogare pentru tine.

Comentarii (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 ;

Sper că acest lucru vă va ajuta în cazul în care aveți pentru a se potrivi și de a actualiza între două tabele.

Comentarii (0)

Am găsit această întrebare în căutarea pentru propria mea soluție pentru o foarte complexe se alăture. Aceasta este o soluție alternativă, pentru o versiune mai complexă a problemei, care am crezut că ar putea fi util.

Am nevoie pentru a popula product_id în domeniul activităților de masă, în cazul în care activitățile sunt numerotate într-o unitate, și unități sunt numerotate într-un nivel (identificate cu ajutorul unui șir de caractere ??N), astfel că se poate identifica activitățile care utilizează un SKU ie L1U1A1. Aceste Articole sunt apoi stocate într-un tabel diferit.

Am identificat următoarele pentru a obține o listă de 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)

Am găsit că era prea complex pentru a încorpora într-o SELECTAȚI în mysql, așa că am creat un tabel temporar, și s-a alăturat cu declarația de actualizare:-

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;

Sper ca cineva găsește acest util

Comentarii (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];
Comentarii (0)

Puteți actualiza valorile din alt tabel folosind inner join astfel de prognoze

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];

Urmează de aici să știe cum să folosească această interogare http://www.voidtricks.com/mysql-inner-join-update/

sau puteți folosi selectați ca subinterogare pentru a face acest lucru

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

interogare a explicat în detalii aici http://www.voidtricks.com/mysql-update-from-select/

Comentarii (0)

Puteți folosi:

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

Pentru aceeași masă,

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;
Comentarii (0)

Am avut o problema cu intrări duplicat într-un tabel în sine. Mai jos este abordările au fost de lucru pentru mine. Acesta a fost, de asemenea, susținută de @sibaz.

În cele din urmă am rezolvat-o folosind întrebările de mai jos:

  1. Select query este salvat într-un tabel temp

DACĂ OBJECT_ID(N'tempdb..#New_format_donor_temp', N'U') NU ESTE NULL DROP TABLE #New_format_donor_temp;

selectați * în #New_format_donor_temp din DONOR_EMPLOYMENTS în cazul în care DONOR_ID ÎN ( 1, 2 )

-- Test New_format_donor_temp -- SELECTAȚI *

  • DE la #New_format_donor_temp;
  1. Tabelul temporare este alăturat în interogare de actualizare.

ACTUALIZARE de SET STATUS_CD=de_new.STATUS_CD, STATUS_REASON_CD=de_new.STATUS_REASON_CD, TYPE_CD=de_new.TYPE_CD DIN DONOR_EMPLOYMENTS CA de INNER JOIN #New_format_donor_temp CA de_new PE de_new.EMP_NO = de.EMP_NO În cazul în CARE de.DONOR_ID ÎN ( 3, 4 )

Nu am experienta cu SQL vă rugăm să informați orice abordare mai bună știi.

Mai presus de interogări sunt pentru serverul MySql.

Comentarii (0)

Verifica cu interogare de mai jos.

actualizare tableA O inner join tableB B la A. name_a = B. name_b set validation_check = dacă(start_dts > end_dts, 'VALABIL', '')

Comentarii (0)