|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
05.07.2008, 23:28 | #1 |
Пользователь
Регистрация: 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. |
06.07.2008, 08:57 | #2 |
Форумчанин
Регистрация: 15.06.2008
Сообщений: 271
|
|
06.07.2008, 15:48 | #3 |
Пользователь
Регистрация: 09.02.2008
Сообщений: 38
|
теперь вот так
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" у меня кажись сама структура запроса кривая.. |
06.07.2008, 17:25 | #4 |
Форумчанин
Регистрация: 15.06.2008
Сообщений: 271
|
Похоже на это. Но если этот запрос немного изменить, то он вполне может отработать. Главное, чтобы в данном случае select выдавал только одну запись. В вашем запросе это не очевидно. Приведу 2 примера ( MS SQL ).
Код:
Код:
|
06.07.2008, 23:05 | #5 |
Пользователь
Регистрация: 09.02.2008
Сообщений: 38
|
select top 1 ( laptop.code ) + 20,
что есть top 1? запрос начал рабоать, но выдает неправильный результат...4 строки не добавляет |
07.07.2008, 05:15 | #6 |
Форумчанин
Регистрация: 07.08.2007
Сообщений: 154
|
gotex, как Вам не стыдно. Хотите чужими руками получить сертификат?
|
07.07.2008, 07:24 | #7 |
Форумчанин
Регистрация: 15.06.2008
Сообщений: 271
|
select top 1 означает, что будет выбрана только одна запись ( первая попавшаяся, если только в запросе не указана сортировка ). Поэтому он и не добавляет оставшиеся строки. Попробуйте вариант без top 1. Если не получиться, то ковыряйте where.
|
07.07.2008, 07:26 | #8 |
Форумчанин
Регистрация: 15.06.2008
Сообщений: 271
|
|
07.07.2008, 12:59 | #9 |
Пользователь
Регистрация: 09.02.2008
Сообщений: 38
|
вот что в этом стыдного? Просто давно с этой задачей сижу, а у знакомы ни у кого не спросишь, вот и решил тут спросить...тем более только 1 задача...если это и правда так стыдно, могу удалить все посты Задачу между прочим мне не решили, а только на косяк в структуре указали. За что большое спасибо!!)
Последний раз редактировалось gotex; 07.07.2008 в 13:02. |
07.07.2008, 13:00 | #10 |
Пользователь
Регистрация: 09.02.2008
Сообщений: 38
|
А сертификат можно получить на www.sql-ex.ru ...там читаете что да как, регистриюетесь и решаете задачи
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
задача по ООП | 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 |