Ошибка «Не удается найти таблицу» в SQL ИЗ(ОБЪЕДИНЕНИЕ) В ВИДЕ таблицы, ВНУТРЕННЕЕ СОЕДИНЕНИЕ, ПОДСЧЕТ() ИЗ таблицы

#sql #ms-access #count #inner-join

Вопрос:

В настоящее время у меня есть запрос, в котором внутри каждого объединения выберите, чтобы получить количество случаев, у меня было что-то вроде:

 SELECT Order_Id, Order_Date, 
       C.cnt AS Order_Parts
  FROM table1
  INNER JOIN (SELECT Order_Id, count(Order_Id) as cnt
                 FROM table1
                GROUP BY Order_Id) C ON table1.Order_Id = C.Order_Id
UNION SELECT Order_Id, Order_Date, 
       C.cnt AS Order_Parts
  FROM table2
  INNER JOIN (SELECT Order_Id, count(Order_Id) as cnt
                 FROM table2
                GROUP BY Order_Id) C ON table2.Order_Id = C.Order_Id
 

И это сработало нормально, но я реорганизую его так, чтобы ОБЪЕДИНЕНИЕ находилось внутри запроса, так что что-то вроде этого:

 SELECT
Order_Id,Order_Date,C.cnt AS Order_Parts

FROM(
    SELECT Order_Id, Order_Date
    FROM table1
    UNION SELECT Order_Id, Order_Date
    FROM table2
) AS Parts
    INNER JOIN (SELECT Order_Id, count(Order_Id) as cnt
                FROM Parts
                GROUP BY Order_Id) C ON Parts.Order_Id = C.Order_Id
 

Но Access выдает мне ошибку, в которой говорится, что он не может найти таблицу или запросить «Части». Я ни за что на свете не могу понять, почему он не может его использовать; может ли кто-нибудь указать мне, в чем дело?

Ответ №1:

Ошибка кажется довольно очевидной. Псевдоним таблицы (т. е. parts ) ссылается на таблицу или ссылку для определения столбцов. Это действительно обеспечивает новый «источник» данных.

То есть он не может быть повторно использован в качестве таблицы в from предложении.

Это верно для всех баз данных. Однако практически любая другая база данных поддерживает общие табличные выражения, которые делают то, что вы хотите. MS Access этого не делает. Ваши единственные варианты-это:

  • Повторите UNION запрос для второй ссылки.
  • Используйте представление.

Примечание.Могут существовать другие подходы к написанию запроса, который вы хотите написать. Для этого я бы предложил вам задать новый вопрос с образцами данных, желаемыми результатами и четким объяснением того, чего вы хотите достичь.

Кроме того, вы можете не захотеть UNION , потому что это удаляет дубликаты. UNION ALL встречается чаще.

Комментарии:

1. О Боже, конечно. Спасибо! Да, возможно, в какой-то момент мне придется написать новый вопрос с общей целью. ОБЪЕДИНЕНИЕ должно быть в порядке, я думаю, в этом случае, поскольку каждая таблица имеет совершенно другой формат для Order_Id (я объединяю данные заказа с Ebay, Etsy и некоторых других в один), но мне, вероятно, все равно следует привыкнуть к ОБЪЕДИНЕНИЮ…

2. @Eireni’Fikia’Moutoussi . . . Я мог бы предложить вам переключиться на более стандартную базу данных.

3. Я ах, не знаю, что вы имеете в виду под этим, я не знаю, что является стандартным, так как я просто выясняю вещи, когда я занимаюсь малым бизнесом, в котором работаю. У меня 0 курсов по ИТ, на самом деле я изначально был нанят для маркетинга/графического дизайна, но бумажная работа с руководством сводила меня с ума, поэтому я решил изучить некоторые материалы о базах данных, и мои боссы не возражали. Но с тех пор я перестроился, так что это больше не выглядит так, снова… Я уверен, что это, вероятно, повод поморщиться для вас…