UPDATE c подзапросом

10brd
Дата: 07.06.2011 15:16:58
Доброго времени суток!
Имеется две таблицы table1 и table2, необходимо в поле prefix таблицы1 записать значение содержащиеся в таблице2, но при условии, что значение таблицы2 является префиксом значения в поле code таблицы1 и проверка начинается со значений наибольшей длины и по убывающей. Обрабатываются только те значения в поле code таблицы1 длина которых >= 3
--table1
code  prefix
789   null
456   null
123   null
74    null

--table2
prefix
789
45
1

--результат--
--table1
code  prefix
789   789
456   45
123   1

Пытался вот такой запрос выполнить, но он не проходит:
UPDATE table1 SET prefix = 
(SELECT prefix FROM table2 WHERE table1.code like table2.prefix + '%' ORDER BY LEN(table2.prefix) DESC)
WHERE prefix IS NULL
AND LEN(code) >= 3

Не ругайте, если вопрос не корректно сформулировал :)
igor2222
Дата: 07.06.2011 15:28:44
10brd,

UPDATE SET
igor2222
Дата: 07.06.2011 15:29:38
сорри
UPDATE
SET FROM WHERE
Glory
Дата: 07.06.2011 15:30:29
10brd

Пытался вот такой запрос выполнить, но он не проходит:
UPDATE table1 SET prefix = 
(SELECT prefix FROM table2 WHERE table1.code like table2.prefix + '%' ORDER BY LEN(table2.prefix) DESC)
WHERE prefix IS NULL
AND LEN(code) >= 3

Так и пишет - "Не прохожу !" ?
10brd
Дата: 07.06.2011 15:36:53
Glory,

если быть точнее, пишет:
The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.
Гавриленко Сергей Алексеевич
Дата: 07.06.2011 15:37:48
10brd
Glory,

если быть точнее, пишет:
The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.
И что не понятно из сообщения об ошибке?
10brd
Дата: 07.06.2011 17:51:35
Гавриленко Сергей Алексеевич,

Уважаемый, вопрос топика заключается не в правильности запроса, а как оформить запрос для решение указанной задачи, а мой запрос - это лишь первое, что пришло в голову.

Вопрос остается открытым.
gar
Дата: 07.06.2011 17:54:31
10brd,

из селекта убери order by
сделай так чтобы селект возвращал одно значение
Glory
Дата: 07.06.2011 17:56:05
10brd
Уважаемый, вопрос топика заключается не в правильности запроса, а как оформить запрос для решение указанной задачи, а мой запрос - это лишь первое, что пришло в голову.

Исправление ошибки и даст решение
10brd
Дата: 07.06.2011 21:32:25
gar
10brd,

из селекта убери order by
сделай так чтобы селект возвращал одно значение


ну тогда обновиться только одна запись, а как обновить все значения одним запросом???