Указанное поле может ссылаться на несколько таблиц в предложении FROM вашего оператора SQL - PullRequest
0 голосов
/ 14 февраля 2020

В настоящее время я нахожусь в классе базы данных и работаю в Access с SQL. Я должен перечислить некоторые объекты с 2 условиями, описанными в операторе WHERE, однако, прежде чем мой код SQL даже выполнится, возникает ошибка, которая гласит:

Указанное поле 'eventno' может ссылаться к более чем одной таблице в предложении FROM вашего оператора SQL

Я понятия не имею, как исправить ошибку и что конкретно она говорит мне об ошибке. Кто-нибудь, пожалуйста, помогите мне и разъясните мне ошибку, чтобы расширить мои знания об этом? Спасибо.

SELECT planno, eventno, workdate, activity
FROM EventPlan, Facility, EventRequest
WHERE EventPlan.eventno = EventRequest.eventno
    AND EventRequest.facno = Facility.facno
    AND workdate BETWEEN #01-Dec-2013# AND #31-Dec-2013#
    AND facname = 'Basketball arena';

Ответы [ 2 ]

4 голосов
/ 14 февраля 2020

Во-первых, используйте запятые в предложении FROM, только если вы хотите получить декартово произведение и используете MS Access.

Во-вторых, укажите все имена столбцов.

Теперь пришло время выучить хорошие привычки Итак, я ожидал бы что-то вроде этого:

SELECT ep.planno, ep.eventno, ?.workdate, ?.activity
FROM (EventPlan as ep INNER JOIN
      EventRequest as er
      ON ep.eventno = er.eventno
     ) INNER JOIN
     Facility as f
     ON er.facno = f.facno
WHERE ?.workdate BETWEEN #01-Dec-2013# AND #31-Dec-2013# AND
      ?.facname = 'Basketball arena';

? s для псевдонимов таблиц для таблиц, откуда происходят столбцы. Я не знаю вашу модель данных, но вы знаете, так что вы можете заполнить их.

2 голосов
/ 14 февраля 2020

Это происходит потому, что поле eventno существует в нескольких таблицах, но в предложении SELECT вы не указали, из какой таблицы получить значение.

Измените SQL на что-то вроде этого:

SELECT planno, EventPlan.eventno, workdate, activity
FROM EventPlan, Facility, EventRequest
WHERE EventPlan.eventno = EventRequest.eventno
    AND EventRequest.facno = Facility.facno
    AND workdate BETWEEN #01-Dec-2013# AND #31-Dec-2013#
    AND facname = 'Basketball arena';

Также было бы хорошо указать условия соединения в предложении FROM вашего запроса, а не в фильтре (предложение WHERE), например так:

SELECT planno, EventPlan.eventno, workdate, activity
FROM EventPlan
    LEFT JOIN Facility ON EventPlan.facno = Facility.facno
    LEFT JOIN EventRequest ON EventPlan.eventno = EventRequest.eventno
WHERE workdate BETWEEN #01-Dec-2013# AND #31-Dec-2013#
    AND facname = 'Basketball arena';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...