Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 1 |

 

  Вопрос: Знатокам SQL СРОЧНО!!! Добавлено: 23.04.04 19:51  

Автор вопроса:  Ганчиков

Товарищи, нужна ваша СРОЧНАЯ ПОМОЩЬ!!!

Есть 3 таблицы (с указанием реквизитов):

Магазины (Код магазина|Наименование|Дилер|Район|Адрес|Телефон|),

Детали (Код детали|Наименование|... и т.д.),

Реестр (Код записи|Код магазина|Код детали|Цена)

Нужно написать запрос, выводящий все магазины, торгующие указанной деталью (предположим, 'КОЛЕСО') с указанием цены по которой продается деталь. Вот что я написал:

SELECT Наименование, Дилер, Район, Адрес, Телефон, Реестр.[Цена детали (руб)]
FROM Магазины,Реестр
WHERE Магазины.[Код магазина] = Реестр.[Код магазина] AND Магазины.[Код магазина] IN (SELECT [Код магазина] FROM Реестр WHERE Реестр.[Код детали] IN
(SELECT [Код детали] FROM Детали WHERE Детали.Наименование = 'Колесо'))

Проблема в том, что в этом случае выдаются все записи в таблице Магазины, коды которых указаны в таблице Реестр. А нужно, чтобы только те, где Реестр.Код детали = Детали.Код детали и т.д. (по запросу должно быть понятно...). Очень жду вашей помощи, заранее благодарен, Михаил.

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 AASoft



Вопросов: 86
Ответов: 920
 Профиль | | #1 Добавлено: 23.04.04 21:26

SELECT Наименование, Дилер, Район, Адрес, Телефон, Реестр.[Цена детали (руб)]
FROM Магазины INNER JOIN Реестр ON Магазины.[Код магазина] = Реестр.[Код магазина] INNER JOIN Детали ON Детали.[Код детали] =  Реестр.[Код детали] WHERE Детали.Наименование = 'Колесо'

Ответить

Номер ответа: 2
Автор ответа:
 Ганчиков



Вопросов: 8
Ответов: 5
 Профиль | | #2 Добавлено: 25.04.04 11:40

AASoft, запрос не работает (набирал в Access) - пишет - "ошибка синтаксиса (пропущен оператор)"

Ответить

Номер ответа: 3
Автор ответа:
 ol2003



Вопросов: 3
Ответов: 122
 Профиль | | #3 Добавлено: 26.04.04 22:56

SELECT Наименование, Дилер, Район, Адрес, Телефон, Реестр.[Цена детали (руб)]
FROM Магазины, Реестр

WHERE Магазины.[Код магазина] = Реестр.[Код магазина] AND Магазины.[Код магазина] =Реестр.[Код магазина] AND Реестр.[Код детали] IN
(SELECT [Код детали] FROM Детали WHERE Детали.Наименование = 'Колесо')

Попробуй так.

Ответить

Номер ответа: 4
Автор ответа:
 OAN



Вопросов: 2
Ответов: 17
 Профиль | | #4 Добавлено: 28.04.04 11:13

согласен с AASoft, INNER JOIN будет всегда быстрей SELECT IN (...), ведь только в этом случае работает поиск по индексу (Реестр.[Код детали])

а в запросе пропущены круглые скобки:

SELECT Наименование, Дилер, Район, Адрес, Телефон, Реестр.[Цена детали (руб)]

FROM (Магазины INNER JOIN Реестр ON Магазины.[Код магазина] = Реестр.[Код магазина]) INNER JOIN Детали ON Детали.[Код детали] = Реестр.[Код детали] WHERE Детали.Наименование = 'Колесо';

если запрос пишешь а Акцессе, то используй построитель запросов - он правильно соберет связи

Ответить

Номер ответа: 5
Автор ответа:
 AASoft



Вопросов: 86
Ответов: 920
 Профиль | | #5 Добавлено: 30.04.04 21:34
gy, ya evo tak prosto pisal, bez nichego. a voobsheto naskokaya znayu enti skobki ne nuzhny....aaaaaaaa, mozhet to toka v SQL Server'e, a??nu, ne znayu, no vopros ved` vrode reshili?nu i horosho esli rabotaet

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам