Как сделать запрос в MS-Access, который возвращает пересечение трех других запросов? - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть форма поиска, которая позволяет пользователю вводить местоположение, дату или ID. Эта форма генерирует три запроса, которые возвращают соответствующие результаты или все записи, если для этой категории не было введено ни одного поискового запроса. Я намеревался сделать четвертый запрос, который пересек первые три, но не смог заставить его работать. Я рассмотрел похожие вопросы об использовании функции SQL INNER JOIN, но не могу заставить ее работать. SQL от каждого из моих трех запросов ниже. (или, если есть лучший способ сделать это, дайте мне знать. Я пытался сделать все это в одном запросе, и это было беспорядок).

Qry_ByDate:

SELECT tbl_AssyMoves.[Assy ID], tbl_AssyMoves.[From ICA], tbl_AssyMoves.[From Loc], tbl_AssyMoves.[To ICA], tbl_AssyMoves.[To Loc], tbl_AssyMoves.Date, tbl_AssyMoves.Comments
FROM tbl_AssyMoves
WHERE (((tbl_AssyMoves.Date) Between [Forms]![Form1]![StartDate] And [Forms]![Form1]![EndDate]))

Qry_ByLoc:

SELECT tbl_AssyMoves.[Assy ID], tbl_AssyMoves.[From ICA], tbl_AssyMoves.[From Loc], tbl_AssyMoves.[To ICA], tbl_AssyMoves.[To Loc], tbl_AssyMoves.Date, tbl_AssyMoves.Comments
FROM tbl_AssyMoves
WHERE (((tbl_AssyMoves.[From ICA]) Like Forms!Form1!Combo_ICA) And ((tbl_AssyMoves.[From Loc]) Like Forms!Form1!Txt_Loc)) Or (((tbl_AssyMoves.[To ICA]) Like Forms!Form1!Combo_ICA) And ((tbl_AssyMoves.[To Loc]) Like Forms!Form1!Txt_Loc))

Qry_ByID:

SELECT tbl_AssyMoves.[Assy ID], tbl_AssyMoves.[From ICA], tbl_AssyMoves.[From Loc], tbl_AssyMoves.[To ICA], tbl_AssyMoves.[To Loc], tbl_AssyMoves.Date, tbl_AssyMoves.Comments
FROM tbl_AssyMoves
WHERE (((tbl_AssyMoves.[Assy ID]) Like [Forms]![Form1]![txt_AssyID]))

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Пересечение трех запросов возвращает все строки, для которых применяются все условия в предложениях WHERE:

SELECT tbl_AssyMoves.[Assy ID], tbl_AssyMoves.[From ICA], tbl_AssyMoves.[From Loc],
tbl_AssyMoves.[To ICA], tbl_AssyMoves.[To Loc], tbl_AssyMoves.Date, tbl_AssyMoves.Comments
FROM tbl_AssyMoves 
WHERE
  (tbl_AssyMoves.Date Between [Forms]![Form1]![StartDate] And [Forms]![Form1]![EndDate])
  And
  (tbl_AssyMoves.[Assy ID]) Like [Forms]![Form1]![txt_AssyID])
  And
  (((tbl_AssyMoves.[From ICA]) Like Forms!Form1!Combo_ICA) And ((tbl_AssyMoves.[From Loc]) Like Forms!Form1!Txt_Loc)) Or (((tbl_AssyMoves.[To ICA]) Like Forms!Form1!Combo_ICA) And ((tbl_AssyMoves.[To Loc]) Like Forms!Form1!Txt_Loc))
0 голосов
/ 30 апреля 2019

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

SELECT tbl_AssyMoves.[Assy ID], tbl_AssyMoves.[From ICA], tbl_AssyMoves.[From Loc], 
tbl_AssyMoves.[To ICA], tbl_AssyMoves.[To Loc], tbl_AssyMoves.Date, tbl_AssyMoves.Comments

FROM 

(SELECT tbl_AssyMoves.[Assy ID], tbl_AssyMoves.[From ICA], tbl_AssyMoves.[From Loc], 
tbl_AssyMoves.[To ICA], tbl_AssyMoves.[To Loc], tbl_AssyMoves.Date, tbl_AssyMoves.Comments 
FROM Qry_ByDate

UNION SELECT tbl_AssyMoves.[Assy ID], tbl_AssyMoves.[From ICA], tbl_AssyMoves.[From Loc], 
tbl_AssyMoves.[To ICA], tbl_AssyMoves.[To Loc], tbl_AssyMoves.Date, tbl_AssyMoves.Comments 
FROM Qry_ByLoc

UNION SELECT tbl_AssyMoves.[Assy ID], tbl_AssyMoves.[From ICA], tbl_AssyMoves.[From Loc], 
tbl_AssyMoves.[To ICA], tbl_AssyMoves.[To Loc], tbl_AssyMoves.Date, tbl_AssyMoves.Comments 
FROM Qry_ById)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...