#sql #ms-access-2007
#sql #ms-access-2007
Вопрос:
У меня есть две таблицы. Один называется prem и содержит все идентификаторы, которые существуют в системе, и JimsQueryByColl, который содержит большинство этих идентификаторов с прикрепленной различной информацией. Я пытаюсь создать единый запрос, который будет включать все идентификаторы из prem и все записи из JimsQueryByColl where JimsQueryByColl.Коллекционер = «Фредерик Роуд». Текущий запрос, который у меня есть, выглядит следующим образом, но предоставляет только последнюю часть информации (без идентификаторов из prem, которые не отображаются в списке идентификаторов с Frederick Road в колонке collector):
ВЫБЕРИТЕ Prem.meter_miu_id, JimsQueryByColl.*, Prem.longitude, Prem.latitude
В начале СЛЕВА ПРИСОЕДИНИТЕСЬ К JimsQueryByColl НА Prem.meter_miu_id = JimsQueryByColl.[Идентификатор MIU]
ГДЕ (((JimsQueryByColl.Коллектор)=»Frederick Road»))
Обычно левое соединение достигло бы того, чего я хочу, но инструкция where делает это так, что идентификаторы, которые содержали бы пустую информацию для всех, кроме поля *Prem.meter_miu_id*, не включены. Я попытался добавить «или JimsQueryByColl.Значение Collector РАВНО НУЛЮ» для инструкции WHERE, но это не дало правильного результата.
Два текущих метода запроса, которые у меня есть для получения нужной информации, называются FredrickRoad и Query3:
FredrickRoad-
ВЫБЕРИТЕ JimsQueryByColl.* ИЗ JimsQueryByColl, ГДЕ (((JimsQueryByColl.Коллектор)=»Frederick Road»))
За которым следует Query3 —
ВЫБЕРИТЕ Prem.meter_miu_id, JimsQueryByColl.*, Prem.longitude, Prem.latitude СЛЕВА ОТ Prem.JOIN JimsQueryByColl НА Prem.meter_miu_id = JimsQueryByColl.[Идентификатор MIU] ГДЕ (((JimsQueryByColl.Коллектор)=»Frederick Road»));
Но я хотел бы сделать это за один шаг, если это возможно. Я надеюсь, что я написал это ясно, и если кому-то нужно разъяснение, просто спросите.
Текущее решение
ВЫБЕРИТЕ Prem.meter_miu_id, JimsQueryByColl.*, Prem.longitude, Prem.latitude
в FrederickRoad СЛЕВА ОТ НАЧАЛА, ЧТОБЫ ПРИСОЕДИНИТЬСЯ к JimsQueryByColl НА (Prem.meter_miu_id = JimsQueryByColl.[MIU ID]
И JimsQueryByColl.Коллектор=»Frederick
Road»)
Это позволяет обойти странную ошибку, которую я получаю с запросом, поскольку он помещает его в таблицу и больше не обрабатывает запрос напрямую. Однако я хотел бы знать, что вызывает проблемы, с которыми я сталкиваюсь.
Ответ №1:
Попробуйте:
SELECT Prem.meter_miu_id, JimsQueryByColl.*, Prem.longitude, Prem.latitude
FROM Prem LEFT JOIN JimsQueryByColl
ON (Prem.meter_miu_id = JimsQueryByColl.[MIU ID]
AND JimsQueryByColl.Collector="Frederick Road")
Комментарии:
1. У меня это не работает, похоже, что AND в инструкции join не поддерживается Access 2007
2. Заставил это работать. Все, что мне нужно было сделать, это окружить «Prem.meter_miu_id = JimsQueryByColl.meter_miu_id = JimsQueryByColl. [MIU ID] И JimsQueryByColl. Коллектор=»Frederick Road»» в круглых скобках. Спасибо за помощь.
3. На самом деле, это работает и отчасти нет. Я могу заставить Access сделать это один раз, но когда я пытаюсь закрыть его и запустить снова, он по-прежнему выдает мне ошибку «Выражение объединения не поддерживается» и вообще не открывает запрос. Есть идеи, как заставить это работать в Access?
4. Заключив в круглые скобки оператор On, как вы показали, но когда я закрываю Access и открываю его обратно и пытаюсь открыть запрос, даже в режиме конструктора, он выдает мне эту ошибку. И даже когда я могу запустить его при первом вводе sql, он выдает мне эту ошибку, если я пытаюсь отсортировать результат по Prem.meter_miu_id. У меня нет ответа на то, как он выдает мне правильный результат, а затем сообщает мне, что оператор join не поддерживается. Для меня это не имеет смысла.
5. Можете ли вы указать точную инструкцию, которую вы пытаетесь — вы только что упомянули, что добавили инструкцию ‘order by’. Нет причин, по которым «точно» такой же запрос сработал бы в одну секунду и не сработал бы в следующую секунду.