Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: sql запрос  (Прочитано 10284 раз)
0 Пользователей и 1 Гость смотрят эту тему.
shtyrmovik
Гость
« : 31-05-2009 09:43 » 

Раньше у меня в таблице Zayavka содержались только Idшиники из таблицы KlassifikaciyaInstrumentov и RabInfo. Тперерь надо чтоб отображались и соответствующие айдишникам поля (RabInfo.Familia, RabInfo.Name, KlassifikaciyaInstrumentov.Name) из других таблиц RabInfo, KlassifikaciyaInstrumentov

Результат такой, что все поля пустые. Подскажите пожалуйста где у меня в запросе ошибка.

SELECT Zayavka.Id, Zayavka.Quantity, Zayavka.DataVidachi, Zayavka.DataSdachi, Zayavka.IdRab, Zayavka.IdClassic, Zayavka.Instrument,
RabInfo.Familia, RabInfo.Name,
KlassifikaciyaInstrumentov.Name FROM RabInfo
      LEFT JOIN Zayavka ON RabInfo.Id =  Zayavka.IdRab
      LEFT JOIN KlassifikaciyaInstrumentov ON KlassifikaciyaInstrumentov.Id = Zayavka.IdClassic


и ещё один запрос с той же проблемой

SELECT CkladOtdel.Id, CkladOtdel.IdClass, CkladOtdel.Stellash, CkladOtdel.Polka, CkladOtdel.Komnata, CkladOtdel.Instrument,
KlassifikaciyaInstrumentov.Name FROM CkladOtdel
LEFT JOIN KlassifikaciyaInstrumentov ON CkladOtdel.IdClass = KlassifikaciyaInstrumentov.Id
« Последнее редактирование: 31-05-2009 09:48 от Sel » Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 31-05-2009 09:51 » 

Ошибка в выражении FROM. Там не перечислены все таблицы из которых извлекаются данные
Записан

С уважением, Oldy.
shtyrmovik
Гость
« Ответ #2 : 31-05-2009 09:53 » 

Если начать перечислять, то он на них ругается Not unique table/alias

Тут же конструкция LEFT JOIN, поэтому таблицы, используемые слева вводить нельзя
« Последнее редактирование: 31-05-2009 09:59 от Sel » Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 31-05-2009 09:59 » 

Ругается на "FROM Zayavka, RabInfo, KlassifikaciyaInstrumentov"? Попробуйте не выбирать поля Zayavka.IdRab, Zayavka.IdClassic, они нужны только для связей.
Записан

С уважением, Oldy.
shtyrmovik
Гость
« Ответ #4 : 31-05-2009 10:10 » 

нет, персонально на таблицу, к примеру Not unique table/alias: 'KlassifikaciyaInstrumentov'

Поля эти я уже и убирал и вставлял, разницы никакой
Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 31-05-2009 10:38 » 

RabInfo.Name, KlassifikaciyaInstrumentov.Name - в результирующем запросе два поля с одним именем.
Попробуйте KlassifikaciyaInstrumentov.Name AS KlassName  
Записан

С уважением, Oldy.
shtyrmovik
Гость
« Ответ #6 : 31-05-2009 10:59 » 

Благодарю, заработало.
Но возникла другая проблема

$a6 = mysql_query("SELECT Zayavka.Id, Zayavka.Quantity, Zayavka.DataVidachi, Zayavka.DataSdachi, Zayavka.IdRab, Zayavka.IdClassic, Zayavka.Instrument,
RabInfo.Familia, RabInfo.Name, KlassifikaciyaInstrumentov.Name as Instrumentt FROM RabInfo
      LEFT JOIN Zayavka ON RabInfo.Id =  Zayavka.IdRab
      LEFT JOIN KlassifikaciyaInstrumentov ON KlassifikaciyaInstrumentov.Id = Zayavka.IdClassic ");

У меня выводятся все данные из таблицы  RabInfo (там, к примеру, если у рабочего нет инструмента, то он не должен выводиться),
помоги, пожалуйста, написать его, потому что я без понятия, как здесь это сделать.

Его это условие.
« Последнее редактирование: 31-05-2009 11:20 от Sel » Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 31-05-2009 11:23 » 

Смотрите на способы присоединения таблиц:
LEFT JOIN
RIGHT JOIN
INNER JOIN
OUTER JOIN
Записан

С уважением, Oldy.
shtyrmovik
Гость
« Ответ #8 : 31-05-2009 11:40 » 

благодарю за подсказку!
WHERE RabInfo.Id = Zayavka.IdRab

Большое спасибо, вы мне очень помогли. Надеюсь, у меня больше вопросы не возникнут )))
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 07-08-2009 05:24 » 

Access:

вот такой запрос работает (к предмету приписывается дата покупки из таблицы t_buh, поиск по buh_id)
Код:
Select
 i.item_id
,i.item_name
,i.buh_id_buy
,i.sold
,i.buh_id_sell
,b.buh_date as buy_date
 from t_itemz i
 left join t_buh b on b.buh_id=i.buh_id_buy

а ещё нужно бы приписать и дату продажи, но почему то не выходит, что то в синтаксисе напутано ?
Код:
Select
 i.item_id
,i.item_name
,i.buh_id_buy
,i.sold
,i.buh_id_sell
,s.buh_date as sell_date
,b.buh_date as buy_date
 from t_itemz i
 left join t_buh s on s.buh_id=i.buh_id_sell //<<<ругается на это место
 left join t_buh b on b.buh_id=i.buh_id_buy
Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 07-08-2009 06:40 » 

Алексей1153++, в Access надо явно скобки ставить вокруг join объединений, чтобы указать их порядок.

Твоя запись означает (X join Y) join Z. Можно и X join (Y join Z).
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 07-08-2009 06:57 » new

во, спасибо ))

вот это сработало как надо
Код:
Select
 i.item_id
,i.item_name
,i.buh_id_buy
,i.sold
,i.buh_id_sell
,s.buh_date as sell_date
,b.buh_date as buy_date
 from
 (t_itemz i left join t_buh s on s.buh_id=i.buh_id_sell)
            left join t_buh b on b.buh_id=i.buh_id_buy
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines