Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 05.07.2008, 23:28   #1
gotex
Пользователь
 
Регистрация: 09.02.2008
Сообщений: 38
Репутация: 10
По умолчанию Задача по 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
Репутация: 152
По умолчанию

Цитата:
Сообщение от 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
Репутация: 10
По умолчанию

Цитата:
Сообщение от 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
Репутация: 152
По умолчанию

Цитата:
Сообщение от 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
Репутация: 10
По умолчанию

select top 1 ( laptop.code ) + 20,

что есть top 1?

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

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

Цитата:
Сообщение от 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
Репутация: 152
По умолчанию

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


15:52.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru