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
|
|
« Ответ #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
|
|
« Ответ #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
|
|
« Ответ #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
|
|
« Ответ #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
Большое спасибо, вы мне очень помогли. Надеюсь, у меня больше вопросы не возникнут )))
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #10 : 07-08-2009 06:40 » |
|
Алексей1153++, в Access надо явно скобки ставить вокруг join объединений, чтобы указать их порядок.
Твоя запись означает (X join Y) join Z. Можно и X join (Y join Z).
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #11 : 07-08-2009 06:57 » |
|
во, спасибо )) вот это сработало как надо 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
|
|
|
Записан
|
|
|
|
|