2014-12-03 120 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。