2014-12-03 3 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);  

Я проворачивал JOINS, но, похоже, не понял. Мой вопрос: если кто-то может указать мне в правильном направлении.

+2

Является ли это '' 'шаблоном в' МЕЖДУ '3699 * "И" 3900 * "'? Потому что 'BETWEEN' не поддерживает такой. – i486

+1

... И почему вы используете IN с подзапросом для той же таблицы? Вы можете просто сделать 'UPDATE table_1 SET ... WHERE почтовый индекс BETWEEN" 3699 * "AND" 3900 * "AND telstriplengte = '10''. – i486

+0

Являются ли '' почтовые индексы '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '? По крайней мере последнее кажется мне маловероятным, поэтому лучше «telstriplengte = 10». – glglgl

ответ

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. Не требуется, но любая строка может быть обновлена, что соответствует условиям, и я предполагаю, что вам нужен тот, у которого самый маленький идентификатор.

Смежные вопросы