2015-05-20 29 views
1

我只想在car_log中沒有狀態爲'test'的情況下更新last_test_date,我真的覺得這段代碼太可怕了,有什麼辦法可以更好地寫它嗎?SQL - 僅當子查詢不爲空時更新

UPDATE car SET last_test_date = 
(SELECT date FROM car_log WHERE car_log.car_id = car.id AND 
car_log.status != 'test' ORDER BY date DESC LIMIT 0,1) 
WHERE (SELECT COUNT(*) FROM car_log WHERE car_log_id = client.id AND 
car_log.status != 'test') > 0; 

回答

2

使用@@ ROWCOUNT來獲得最後一個查詢行數,這樣你就不會重複選擇

... 
WHERE @@ROWCOUNT > 0; 
0

更新聯接語法會讓你的發言更清晰:

UPDATE car 
JOIN (SELECT car_id, MAX(date) AS max_date 
     FROM car_log 
     WHERE car_log.status != 'test') ON car_log.car_id = car.id AND 
SET last_test_date = max_date