Mysql使用IN与子查询
问题描述:
我目前正在尝试执行以下查询,但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);
我一直在使用连接,但似乎无法得到正确的。我的问题是,如果有人能指出我正确的方向。
答
难道你不能直接通过一个像这样的查询吗?
UPDATE `TABLE 1` SET `batchid`=1
WHERE `postcode` BETWEEN "36990" AND "39009" AND `telstriplengte`='10' LIMIT 1;
答
这是您的查询:
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。
“BETWEEN”3699 *“AND”3900 *“'中是否为'*'通配符?因为'BETWEEN'不支持这样的。 – i486 2014-12-03 12:55:28
...为什么你在同一个表中使用IN子查询?你可以简单地使'UPDATE table_1 SET ... WHERE postcode BETWEEN“3699 *”和“3900 *”AND telstriplengte ='10''。 – i486 2014-12-03 12:57:25
'邮政编码'和'telstriplengte'真的是字符串吗?至少后者似乎对我来说不太可能,所以'telstriplengte = 10'好得多。 – glglgl 2014-12-03 13:07:34