#sql #select #ms-access-2007
#sql #выберите #ms-access-2007
Вопрос:
Я создал отчет в Access и написал запрос для извлечения записей из нескольких таблиц следующим образом:
SELECT BuildingDetails.*, Contractors.Item, ActionDetails.ActionType
FROM Contractors
INNER JOIN (BuildingDetails
INNER JOIN (ActionDetails
INNER JOIN DormData ON ActionDetails.ActionID = DormData.ActionID)
ON BuildingDetails.BuildingID = DormData.BuildingID)
ON Contractors.ID = DormData.ItemID;
Теперь я хочу, чтобы запрос извлекал только actiontype=repair
или actionid=1
. У нас есть два actontype
«ремонта» и «замены».
Ответ №1:
Я немного переформатировал ваш запрос, чтобы привести его в порядок. Вы не указали, как выглядят данные для фильтра, но, основываясь на том, что вы сказали, я бы выбрал что-то вроде следующего
SELECT BuildingDetails.*,
Contractors.Item,
ActionDetails.ActionType
FROM Contractors
INNER JOIN DormData ON Contractors.ID = DormData.ItemID
INNER JOIN ActionDetails ON DormData.ActionID = ActionDetails.ActionID
INNER JOIN BuildingDetails ON DormData.BuildingID = BuildingDetails.BuildingID
WHERE ActionDetails.ActionType = 'Repair' OR ActionID=1
Если ActionID является столбцом подстановки, который связывает ActionID(1) с ActionType (‘Repair’), то вам не нужно или и вы можете придерживаться одного или другого условия в предложении WHERE.
Надеюсь, это поможет.
Комментарии:
1. привет, Дэвид, у меня другая проблема в проекте access.
2. я создал форму, в которой есть несколько полей со списком. на основе этих выбранных я должен выполнить поиск в своей базе данных и показать ей лист Excel. я совершенно запутался, как я могу это сделать? пожалуйста, помогите
Ответ №2:
Я подозреваю, что вам нужно фильтровать только с помощью actiontype = 'repair'
(я также предполагаю, что ActionID
это автоматический номер, и у вас есть строка {ActionID = 1, actiontype = 'repair'}
только случайно… но, возможно, это слишком далеко экстраполирует 🙂
Я удивлен, что ответ @ David Steele работает в Access (ACE, Jet, что угодно), потому что он удалил круглые скобки из JOIN
предложений (однако, если это так — предлагая связанную таблицу — тогда вы должны «принять» этот ответ). Но я тоже мог бы удержаться от «приведения их в порядок», чтобы ON
предложения были близки к именам таблиц:
SELECT BuildingDetails.*, Contractors.Item, ActionDetails.ActionType
FROM ((DormData
INNER JOIN Contractors
ON Contractors.ID = DormData.ItemID)
INNER JOIN BuildingDetails
ON BuildingDetails.BuildingID = DormData.BuildingID)
INNER JOIN ActionDetails
ON ActionDetails.ActionID = DormData.ActionID
WHERE ActionDetails.ActionType = 'repair';
Ответ №3:
Добавьте это в конец инструкции select, чтобы устранить проблему:
where actiondetails.actiontype = 'repair' or actiondetails.actionid = 1
Комментарии:
1. предоставьте, можете ли вы дать мне свой идентификатор электронной почты