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?
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.
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.
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.
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.
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 (<the above select statement>);
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
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/
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;
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:
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 *
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.