![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите с запросом
port © (2006-10-24 11:56:00)Добрый день.
Помогите пожалуйста с запросом.
Есть таблица
ID|street
---------
1 |23
2 |25
3 |25
n |x
---------
поле Street привязано к таблице Streets,
23 | Ленина
25 | Сталина
n | street
Возможно ли запросом в первой таблице изменить номера на названия улиц.
т.е. я поменял тип поля street первой табл. на String, и теперь нужно вместо номеров подставить названия улиц, согласно второй таблице.
таблица уже содержит больше 1000 записей и вручную их не хочется менять.
port (2006-10-25 11:38:00) [1]> [8] ЮЮ © (25.10.06 04:17)
> where CAST( street.num as varchar(5)) = clients.street
Спасибо большое, получилось. :)
Вот только не могу въехать, почему первый вариант не работал. Ведь изначально поле Clients.Street имело тип Integer (Client.Street = Street.Num), я его изменил на VarChar, соответственно в запросе Update делал обратное.
ЮЮ (2006-10-25 04:17:00) [2]как интересно работает CAST (clients.street as INTEGER) в случае, если там уже стоит наименование улицы? Может конвертировать в другую сторону?
where CAST( street.num as varchar(5)) = clients.street
port (2006-10-24 16:19:00) [3]> [5] RebroFF (24.10.06 13:49)
>
> проблема здесь
Проблемы здесь нет, по большей части информация о клиенте выводится не в лукап поле, а в стринг листе и как таковая в заказе не используется.
А добавлять указанную улицу в табл. улиц(повторюсь) в моем случае не имеет смысла.
> Переписывать плохо спроектированную базу, заполненую данными?
> Ну-ну...
Блин, ну не предусмотрел, бывает.
-----------------------------------------------------
> [6] Anatoly Podgoretsky © (24.10.06 14:21)
> Вообще то приведенная структуры никак не похоже на справочник
> клиентов. Это какая то не нужная таблица, что то перенормализовано.
Я не приводил полную структуру. Это лишь пример поставленной задачи для решения которой я советуюсь с Вами.
--------------------------------------------------------
Ребят, я же не прошу за меня проектировать структуру, я лишь прошу помочь с конкретным вопросом.
Anatoly Podgoretsky (2006-10-24 14:21:00) [4]Вообще то приведенная структуры никак не похоже на справочник клиентов. Это какая то не нужная таблица, что то перенормализовано.
RebroFF (2006-10-24 13:49:00) [5]
> не всегда в табл. улиц есть указанная улица и тогда адресу
> клиента присваивается значение NULL.
проблема здесь
> К тому же в заказе адрес клиента носит лишь визуальный характер.
Это удел всех лукап-полей.
> К сожалению, когда я это понял, в базе уже собралось достаточно
> записей
Переписывать плохо спроектированную базу, заполненую данными?Ну-ну...
port (2006-10-24 13:34:00) [6]Справочник улиц необходим для заказов (т.е. адрес заказа). Также в заказе указывается телефон и адрес клиента, но адрес клиента не обязательно привязан к адресу заказа и если при добавлении заказа клиент отсутствует в базе то он добавляется в базу. Но при добавлении клиента в базу не всегда в табл. улиц есть указанная улицаи тогда адресу клиента присваивается значение NULL.
Добавлять при этом новую улицу (в моем случае) не имеет смысла. К тому же в заказе адрес клиента носит лишь визуальный характер.
К сожалению, когда я это понял, в базе уже собралось достаточно записей.
------------------------------------------------------------------------
Я пытался сделать что-то вроде этого:
UPDATE clients SET
STREET = (SELECT street.name
FROM street
where street.num = (CAST (clients.street as INTEGER))
)
where (NOT clients.street is NULL)
------------------------------------------------------
Запрос вроде выполняется, только изменений в базе ни каких.
Подобный запрос на выборку работает, а на изменение нивкакую. :(
Anatoly Podgoretsky (2006-10-24 13:12:00) [7]
> Возможно ли запросом в первой таблице изменить номера на
> названия улиц.
Можно, но не нужно, интерсно откуда такая мысль пришла в голову.
Про нормализацию почитай.
Sergey13 (2006-10-24 12:54:00) [8]> [0] port (24.10.06 11:56)
А надо ли это делать?
Есть ссылка на улицы. Зачем переносить инфу. Для просмотраможно просто объединить таблицы в запросе.
ЮЮ (2006-10-24 12:02:00) [9]Восможно.
См. синтаксис UPDATE для твоей СУБД