我須要檢查(從同一張表)基於日期時間的兩個事件之間是否存在關聯。 mysql
一組數據將包含某些事件的結束日期時間,另外一組數據將包含其餘事件的開始日期時間。 web
若是第一個事件在第二個事件以前完成,那麼我想將它們連接起來。 sql
到目前爲止,我有: 數據庫
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
而後我加入他們: spa
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
而後,能夠基於個人validation_check字段運行帶有SELECT嵌套的UPDATE查詢嗎? code
若是有人試圖將數據從一個數據庫更新到另外一個數據庫,而不管他們針對的是哪一個表,那麼都必須有一些標準。 事件
這對全部級別的人來講都是更好和乾淨的: ip
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
特拉! 效果很好! 字符串
基於以上理解,您能夠修改設置字段和「啓用」條件來進行工做。 您還能夠執行檢查,而後將數據拉入臨時表,而後使用上述語法替換表名和列名來運行更新。 get
但願它能奏效,若是不能讓我知道。 我會爲您寫一個確切的查詢。
您實際上能夠經過如下兩種方式之一執行此操做:
MySQL更新聯接語法:
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語法:
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)
選擇最適合您的那個。
UPDATE `table1` AS `dest`, ( SELECT * FROM `table2` WHERE `id` = x ) AS `src` SET `dest`.`col1` = `src`.`col1` WHERE `dest`.`id` = x ;
但願這對您有用。
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 ;
但願這對您必須在兩個表之間進行匹配和更新的狀況有所幫助。
我在尋找本身的很是複雜的聯接解決方案時發現了這個問題。 這是該問題的更復雜版本的替代解決方案,我認爲這多是有用的。
我須要在活動表中填充product_id字段,其中活動以單位進行編號,單位以級別進行編號(使用字符串?? N標識),以即可以使用SKU(即L1U1A1)識別活動。 這些SKU而後存儲在另外一個表中。
我肯定了如下內容以獲取activity_id與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)
我發現這太複雜了,沒法合併到mysql中的SELECT中,所以我建立了一個臨時表,並使用update語句將其加入:
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;
我但願有人以爲這有用