這不是完全清楚你想什麼來實現的,但你可以使用這樣的查詢:
UPDATE cp_asseteventinquiry a
LEFT
JOIN flightlogs f
ON f.Asset = a.TopLevelAsset_Num
AND f.Scheduled_Date = DATE_FORMAT(CURDATE(), '%m/%d/%Y')
SET a.Due_Date = DATE_FORMAT(CURDATE(), '%m/%d/%Y')
WHERE a.History='NO'
AND f.Asset IS NULL
要設置Due_Date
欄上,在History
柱具有'NO'
值的每一行,並且在flightlogs
表中沒有任何滿足指定條件的對應行。
爲什麼你需要格式化日期格式,除非這些文件被存儲在字符類型的列中,這是奇怪的,因爲MySQL有一個定製的數據類型來存儲日期值,數據類型爲DATE
。
注:不要把括號各地,他們是沒有必要的表情,特別是如果他們不添加任何意義。例如,在此背景下,括號沒有任何意義:
SELECT DISTINCT(TopLevelAsset_Num) ...
這相當於我們通常所說的使用,
SELECT DISTINCT TopLevelAsset_Num ...
(添加括號的混淆性使它看起來好像DISTINCT是一個函數,需要一個參數。DISTINCT不是一個函數,這是一個關鍵字。它適用於SELECT列表中的所有表達式,它沒有什麼區別列是否被包裹在括號。
後續
我可以看到你所得到的TopLevelAsset_Num
鮮明名單的唯一原因,就是一些具有相同值的行具有History='NO'
和其他的沒有。並且您要更新全部行,並匹配TopLevelAsset_Num
。
在這種情況下,使用內嵌視圖得到的名單,並進行連接操作:
UPDATE cp_asseteventinquiry a
JOIN (SELECT n.TopLevelAsset_Num
FROM cp_asseteventinquiry n
LEFT
JOIN flightlogs f
ON f.Asset = n.TopLevelAsset_Num
AND f.Scheduled_Date = DATE_FORMAT(CURDATE(), '%m/%d/%Y')
WHERE n.History='NO'
AND f.Asset IS NULL
) v
ON v.TopLevelAsset_Num = a.TopLevelAsset_Num
SET a.Due_Date = DATE_FORMAT(CURDATE(), '%m/%d/%Y')
請選擇1個DBMS。你在使用MySql還是SqlServer? – paqogomez
爲什麼SELECT語句中的'TopLevelAsset_Num'周圍存在parens?爲什麼日期值被存儲在字符數據類型的列中,而不是'DATE'數據類型?爲什麼函數名稱DATE_FORMAT和paren之間有空格? – spencer7593