Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как лучше построить запрос на обновление? / 8 сообщений из 8, страница 1 из 1
19.06.2006, 13:45
    #33799666
Denlerien
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше построить запрос на обновление?
Имеется таблица Client, в которой каждый клиент определяется по identity-полю ID, поле Account означает номер счета и соответствует полю ID в таблице Accounts. Сумма на счете хранится в поле Sum. Одному счету могут соответствовать несколько клиентов.
Понятно, что для получения суммы на счете по ID-клиента нужно сделать следующий запрос:
Код: plaintext
1.
2.
3.
4.
5.
  SELECT *
  FROM Accounts a
  INNER JOIN Clients c
  ON a.ID=c.Account
  WHERE c.ID=@Client
* на тот случай если понадобятся другие поля, не существенно.

Теперь надо построить запрос, позволяющий по номеру клиента произовдить, например, пополнение счета. Т.е. при обращении по номеру счета это выглядело бы так:
Код: plaintext
1.
2.
3.
4.
  UPDATE Accounts
  SET Sum=Sum+@Sum
  WHERE ID =@Account
  )
Как корректнее построить аналогичный запрос по ID-клиента? Пока ничего лучше следующего не придумал:
Код: plaintext
1.
2.
3.
4.
5.
6.
  UPDATE Accounts
  SET Sum=Sum+@Sum
  WHERE ID IN (
    SELECT Account FROM Clients
    WHERE ID=@Client
  )
Вроде все в порядке, но я с IN не работал, поэтому сомневаюсь...
...
Рейтинг: 0 / 0
19.06.2006, 13:51
    #33799689
Denlerien
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше построить запрос на обновление?
И еще более сложный запрос
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  UPDATE Accounts
  SET Sum=Sum-@Sum
  WHERE
    (ID=@Account)
  AND EXISTS (
    SELECT *
    FROM Clients c
    INNER JOIN ClClasses cl
    ON c.Class=cl.ID
    WHERE (c.ID=@Client) AND
    (Accounts.Sum+cl.Credit>=@Sum)
  )
Здесь используется база ClClasses - тип клиента, клиенту может предоставлятся кредит, т.е. он может на счете уйти в минус на определенную сумму. Класс клиента записан в Client.Class, сумма кредита хранится в ClClasses.Credit.
Этот запрос вносит расход на сумму @Sum, если это не превысит кредита. Как лучше перестроить этот запрос? И как построить обращение не по номеру счета, а по ID-клиента - так же как я поступил в предыдущем запросе?
...
Рейтинг: 0 / 0
19.06.2006, 14:24
    #33799812
Denlerien
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше построить запрос на обновление?
Или не мучатся и обращатся через номер счета?
...
Рейтинг: 0 / 0
19.06.2006, 14:53
    #33799937
ChA
ChA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше построить запрос на обновление?
DenlerienИ какое отношение все это имеет к форуму "Проектирование БД" ? Возможно, Вам сюда ...
...
Рейтинг: 0 / 0
19.06.2006, 15:12
    #33800036
Denlerien
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше построить запрос на обновление?
Возможно. Но разве запросы SQL зависят от того, на чем построено? Вроде все соответсвует ANSI и должно работать и MSSQL, и в Access, и в MySQL... А темы посвещенной отдельно SQL как таковому вроде нет.
...
Рейтинг: 0 / 0
19.06.2006, 16:49
    #33800460
DocAl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше построить запрос на обновление?
DenlerienВозможно. Но разве запросы SQL зависят от того, на чем построено? Вроде все соответсвует ANSI и должно работать и MSSQL, и в Access, и в MySQL... А темы посвещенной отдельно SQL как таковому вроде нет.
Зависят... У каждого вендора свои заморочки. А синтаксис вашего сервера не поддерживает мультитабличные обновления? Чего-нибудь вроде
Код: plaintext
1.
2.
UPDATE Accounts a, Clients c
SET Sum=Sum+@Sum
WHERE a.ID=c.Account AND c.ID=@Client
...
Рейтинг: 0 / 0
20.06.2006, 08:36
    #33801494
Denlerien
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше построить запрос на обновление?
Ну, на самом деле, я создаю базу под MS SQL, но стараюсь чтобы она максимально соответствовала ANSI. Предложенный вариант не работает. Есть как мелочи (псевдонимы в UPDATE не работают), так и в основе - не работает для объединяния таблиц, как бы они не были написаны, через "," или через "JOIN". мне пришла мысль, что можно создать представление и провести операцию там. Не знаю, правда, насколько это соответствует ANSI, но должно работать.
...
Рейтинг: 0 / 0
20.06.2006, 08:38
    #33801501
Denlerien
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше построить запрос на обновление?
Ладно, попробую задать вопрос в ветке посвященный MSSQL
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как лучше построить запрос на обновление? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]