Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2008, 23:28   #1
gotex
Пользователь
 
Регистрация: 09.02.2008
Сообщений: 38
По умолчанию Задача по SQL

Схема БД состоит из четырех отношений:

Product(maker, model, type)
PC(code, model, speed, ram, hd, cd, price)
Laptop(code, model, speed, ram, hd, screen, price)
Printer(code, model, color, type, price)

Отношение Product представляет производителя (maker), номер модели (model) и тип (PC - ПК, Laptop - ПК-блокнот или Printer - принтер). Предполагается, что номера моделей уникальны для всех производителей и типов продуктов. В отношении PC для каждого номера модели, обозначающего ПК, указаны скорость -speed (процессора в мегагерцах), общий объем RAM (в мегабайтах), размер диска -hd (в гигабайтах), скорость считывающего устройства CD (например, 4х) и цена - price. Отношение Laptop аналогично отношению РС за исключением того, что вместо скорости CD содержится размер экрана -screen (в дюймах). В отношении Printer для каждой модели принтера указывается, является ли он цветным - color ('y', если цветной), тип принтера - type (лазерный - Laser, струйный - Jet или матричный - Matrix) и цена.

Для каждой группы блокнотов с одинаковым номером модели добавить запись в таблицу PC со следующими характеристиками:
код: минимальный код блокнота в группе +20;
модель: номер модели блокнота +1000;
скорость: максимальная скорость блокнота в группе;
ram: максимальный объем ram блокнота в группе *2;
hd: максимальный объем hd блокнота в группе *2;
cd: значение по умолчанию;
цена: максимальная цена блокнота в группе, уменьшенная в 1,5 раза

мой запрос:

insert into pc (code,model,speed,ram,hd,cd,price)
select (min(laptop.code)+20) from laptop,pc
where pc.model=laptop.model
union
select (laptop.model+1000) from laptop,pc
where pc.model=laptop.model
union
select (max(laptop.speed)*2) from laptop,pc
where pc.model=laptop.model
union
select (max(laptop.ram)*2) from laptop,pc
where pc.model=laptop.model
union
select (max(laptop.hd)*2) from laptop,pc
where pc.model=laptop.model
union
select laptop.cd from laptop,pc
where pc.model=laptop.model
union
select (max(laptop.price)/1.5) from laptop,pc
where pc.model=laptop.model
Ошибка "Invalid column name 'cd' "

Где косяк, подскажите плиз

Последний раз редактировалось gotex; 05.07.2008 в 23:34.
gotex вне форума Ответить с цитированием
Старый 06.07.2008, 08:57   #2
edgy
Форумчанин
 
Регистрация: 15.06.2008
Сообщений: 271
По умолчанию

Цитата:
Сообщение от gotex Посмотреть сообщение
select laptop.cd from laptop,pc

Ошибка "Invalid column name 'cd' "
Почему-то я не вижу в таблице 'Laptop' поле 'cd'
edgy вне форума Ответить с цитированием
Старый 06.07.2008, 15:48   #3
gotex
Пользователь
 
Регистрация: 09.02.2008
Сообщений: 38
По умолчанию

Цитата:
Сообщение от edgy Посмотреть сообщение
Почему-то я не вижу в таблице 'Laptop' поле 'cd'
теперь вот так

insert into pc (code,model,speed,ram,hd,cd,price)
select (min(laptop.code)+20) from laptop,pc
where pc.model=laptop.model
union
select (laptop.model+1000) from laptop,pc
where pc.model=laptop.model
union
select (max(laptop.speed)*2) from laptop,pc
where pc.model=laptop.model
union
select (max(laptop.ram)*2) from laptop,pc
where pc.model=laptop.model
union
select (max(laptop.hd)*2) from laptop,pc
where pc.model=laptop.model
union
select cd from laptop,pc
where pc.model=laptop.model
union
select (max(laptop.price)/1.5) from laptop,pc
where pc.model=laptop.model

но опять выдает ошибку "The select list for the INSERT statement contains fewer items than the insert list. The number of SELECT values must match the number of INSERT columns"

у меня кажись сама структура запроса кривая..
gotex вне форума Ответить с цитированием
Старый 06.07.2008, 17:25   #4
edgy
Форумчанин
 
Регистрация: 15.06.2008
Сообщений: 271
По умолчанию

Цитата:
Сообщение от gotex Посмотреть сообщение
у меня кажись сама структура запроса кривая..
Похоже на это. Но если этот запрос немного изменить, то он вполне может отработать. Главное, чтобы в данном случае select выдавал только одну запись. В вашем запросе это не очевидно. Приведу 2 примера ( MS SQL ).

Код:
-- Выбираем первую из найденных записей
-- ( вполне возможно что она и так одна единственная, но тем не менее )

insert into pc 
         ( code, model, speed, ram, hd, cd, price )

   select top 1 ( laptop.code )  + 20,
           ( laptop.model ) + 1000, 
           ( laptop.speed ) * 2,
           ( laptop.ram ) * 2,
           ( laptop.hd ) * 2,
           ( pc.cd ),
           ( laptop.price ) / 1.5
    from laptop, pc
   where pc.model = laptop.model
и
Код:
-- Применение агрегатных фунций
insert into pc 
         ( code, model, speed, ram, hd, cd, price )

   select min ( laptop.code )  + 20,
            min ( laptop.model ) + 1000, 
            max ( laptop.speed ) * 2,
            max ( laptop.ram ) * 2,
            max ( laptop.hd ) * 2,
            min ( pc.cd ),
            max ( laptop.price ) / 1.5
     from laptop, pc
   where pc.model = laptop.model
Попробуйте привести ваш запрос к какому-нибудь из этих вариантов.
edgy вне форума Ответить с цитированием
Старый 06.07.2008, 23:05   #5
gotex
Пользователь
 
Регистрация: 09.02.2008
Сообщений: 38
По умолчанию

select top 1 ( laptop.code ) + 20,

что есть top 1?

запрос начал рабоать, но выдает неправильный результат...4 строки не добавляет
gotex вне форума Ответить с цитированием
Старый 07.07.2008, 05:15   #6
Aristarh Dark
Форумчанин
 
Регистрация: 07.08.2007
Сообщений: 154
По умолчанию

gotex, как Вам не стыдно. Хотите чужими руками получить сертификат?
Aristarh Dark вне форума Ответить с цитированием
Старый 07.07.2008, 07:24   #7
edgy
Форумчанин
 
Регистрация: 15.06.2008
Сообщений: 271
По умолчанию

Цитата:
Сообщение от gotex Посмотреть сообщение
select top 1 ( laptop.code ) + 20,

что есть top 1?

запрос начал рабоать, но выдает неправильный результат...4 строки не добавляет
select top 1 означает, что будет выбрана только одна запись ( первая попавшаяся, если только в запросе не указана сортировка ). Поэтому он и не добавляет оставшиеся строки. Попробуйте вариант без top 1. Если не получиться, то ковыряйте where.
edgy вне форума Ответить с цитированием
Старый 07.07.2008, 07:26   #8
edgy
Форумчанин
 
Регистрация: 15.06.2008
Сообщений: 271
По умолчанию

Цитата:
Сообщение от Aristarh Dark Посмотреть сообщение
gotex, как Вам не стыдно. Хотите чужими руками получить сертификат?
А что за сертификат? Может мне тоже попробовать?
edgy вне форума Ответить с цитированием
Старый 07.07.2008, 12:59   #9
gotex
Пользователь
 
Регистрация: 09.02.2008
Сообщений: 38
По умолчанию

Цитата:
Сообщение от Aristarh Dark Посмотреть сообщение
gotex, как Вам не стыдно. Хотите чужими руками получить сертификат?
вот что в этом стыдного? Просто давно с этой задачей сижу, а у знакомы ни у кого не спросишь, вот и решил тут спросить...тем более только 1 задача...если это и правда так стыдно, могу удалить все посты Задачу между прочим мне не решили, а только на косяк в структуре указали. За что большое спасибо!!)

Последний раз редактировалось gotex; 07.07.2008 в 13:02.
gotex вне форума Ответить с цитированием
Старый 07.07.2008, 13:00   #10
gotex
Пользователь
 
Регистрация: 09.02.2008
Сообщений: 38
По умолчанию

Цитата:
Сообщение от edgy Посмотреть сообщение
А что за сертификат? Может мне тоже попробовать?
А сертификат можно получить на www.sql-ex.ru ...там читаете что да как, регистриюетесь и решаете задачи
gotex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача по ООП Lenivec** Фриланс 2 17.07.2008 15:17
Задача Nil_rus Помощь студентам 3 15.05.2008 09:05
Задача/C++ Stan Помощь студентам 2 24.01.2008 20:33
Задача по ТП. GE076 Помощь студентам 11 07.12.2007 19:29