#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 курсов по ИТ, на самом деле я изначально был нанят для маркетинга/графического дизайна, но бумажная работа с руководством сводила меня с ума, поэтому я решил изучить некоторые материалы о базах данных, и мои боссы не возражали. Но с тех пор я перестроился, так что это больше не выглядит так, снова… Я уверен, что это, вероятно, повод поморщиться для вас…