2014-12-03 99 views
0

我目前正在嘗試執行以下查詢,但mySQL不支持它。Mysql使用IN與子查詢

UPDATE `TABLE 1` SET `batchid`=1 WHERE `id` 
IN (SELECT `id` FROM `TABLE 1` 
    WHERE `postcode` BETWEEN "3699*" 
    AND "3900*" AND `telstriplengte`='10' LIMIT 1);  

我一直在使用連接,但似乎無法得到正確的。我的問題是,如果有人能指出我正確的方向。

+2

「BETWEEN」3699 *「AND」3900 *「'中是否爲'*'通配符?因爲'BETWEEN'不支持這樣的。 – i486 2014-12-03 12:55:28

+1

...爲什麼你在同一個表中使用IN子查詢?你可以簡單地使'UPDATE table_1 SET ... WHERE postcode BETWEEN「3699 *」和「3900 *」AND telstriplengte ='10''。 – i486 2014-12-03 12:57:25

+0

'郵政編碼'和'telstriplengte'真的是字符串嗎?至少後者似乎對我來說不太可能,所以'telstriplengte = 10'好得多。 – glglgl 2014-12-03 13:07:34

回答

3

難道你不能直接通過一個像這樣的查詢嗎?

UPDATE `TABLE 1` SET `batchid`=1 
WHERE `postcode` BETWEEN "36990" AND "39009" AND `telstriplengte`='10' LIMIT 1; 
2

這是您的查詢:

UPDATE `TABLE 1` 
    SET `batchid`=1 
    WHERE `id` IN (SELECT `id` 
        FROM `TABLE 1` 
        WHERE `postcode` BETWEEN "3699*" AND "3900*" AND 
         `telstriplengte`='10' 
        LIMIT 1); 

該查詢的具體問題是,你是指表中的子查詢被更新。在這種情況下 - 假設id我唯一的,你不需要子查詢都:

UPDATE `TABLE 1` 
    SET `batchid`=1 
    WHERE `postcode` BETWEEN "3699*" AND "3900*" 
    AND `telstriplengte` = '10' 
    LIMIT 1; 

使用LIMIT時,通常你也有ORDER BY。不需要,但任何行都可以更新,以符合條件,我猜你想要一個最小的ID。