2015-02-24 49 views
0

我認爲我是從錯誤的角度來看待這個問題,但我無法想出一個方法來完成這項工作。我的查詢是下面:更新哪裏字段是最低的數字

UPDATE my_table AS T0 
JOIN my_table_2 AS T1 
ON T0.timestamp = T1.timestamp AND T0.id = T1.id 

SET lat = lat + 1 

WHERE T0.duration = 'd' 
AND T0.unique >= 0 
AND T0.unique <= 5 

我需要更新,其中T0.unique等於0和5之間的最低數量所以基本上如果上述收益3行,因爲T0.unique = 2一行,並在另一行T0.unique = 3T0.unique = 4在另一行,那麼我只希望它實際更新它的最低數字,即T0.unique = 2

我希望有一些MySQL語法,我不知道這將做到這一點。

+1

需要注意的是獨特的是在MySQL中的保留字,使之成爲一列標識符一個可疑的選擇。 – Strawberry 2015-02-24 10:31:38

+0

使用SELECT MIN加入子查詢(唯一)GROUP BY wahtever – Mihai 2015-02-24 10:32:05

+0

加入的目的是什麼?它是否過濾了一堆值? – TZHX 2015-02-24 10:33:29

回答

1

你能不能做這樣的事情:

UPDATE mytable AS T0 
SET lat = lat + 1 
WHERE T0.duration = 'd' AND T0.unique BETWEEN 0 AND 5 
--- possible alternative to join, allows use of ORDER BY and LIMIT in statement 
AND EXISTS (SELECT T1.id FROM mytable2 AS T1 
    WHERE T0.timestamp = T1.timestamp AND T0.id = T1.id) 
ORDER BY T0.unique ASC 
LIMIT 1 

這將更新至多記錄,而ORDER BY確保它是一個與unique列中的最低值。

+0

UPDATE似乎不接受ORDER BY語句... – superphonic 2015-02-24 11:05:32

+0

@superphonic哦,bollocks。抱歉。它看起來像是一個多表語句時不能使用ORDER和LIMIT。不知道。 – TZHX 2015-02-24 11:08:43

+0

@superphonic是否可以避免在where語句中使用'exists'連接,或者這會導致不可接受的性能下降? – TZHX 2015-02-24 11:13:44

0

你可以試試這個:

UPDATE my_table t0 
    JOIN my_table_2 t1 
    ON t0.timestamp = t1.timestamp 
    AND t0.id = t1.id 
    SET t0.lat = t0.lat + 1 
WHERE t0.duration = 'd' 
    AND t0.unique BETWEEN 0 AND 5 
+1

感謝您的回答(並編輯@Strawberry),但這與我使用不同語法的原始查詢相同。 – superphonic 2015-02-24 11:23:06