sql - Microsoft Access 联合查询导致“查询太复杂”错误
问题描述
我有八个表,其中包含有关对整个公司的应用程序进行更改的信息。我只想查询和组合 200 多个应用程序子集的行。为此,我通过应用程序代码(AAA、BBB 等)查询每个表,并希望合并结果。当我使用超过 5 个应用程序代码时,我收到错误“查询复杂”。
我知道有一种更有效的方法可以做到这一点,但以下是我用我有限的知识所能做的最好的方法。
SELECT * FROM [2019-07-A July 5 to 7] WHERE [Application code] LIKE 'AAA' UNION ALL
SELECT * FROM [2019-07-B July 12 to 14] WHERE [Application code] LIKE 'AAA' UNION ALL
SELECT * FROM [2019-07-C July 19 to 21] WHERE [Application code] LIKE 'AAA' UNION ALL
SELECT * FROM [2019-07-D July 26 to 28] WHERE [Application code] LIKE 'AAA' UNION ALL
SELECT * FROM [2019-08-A Aug 2 to 4] WHERE [Application code] LIKE 'AAA' UNION ALL
SELECT * FROM [2019-08-B Aug 9 to 11] WHERE [Application code] LIKE 'AAA' UNION ALL
SELECT * FROM [2019-08-C Aug 16 to 18] WHERE [Application code] LIKE 'AAA' UNION ALL
SELECT * FROM [2019-08-D Aug 23 to 25 Proposed] WHERE [Application code] LIKE 'AAA' UNION ALL
SELECT * FROM [2019-07-A July 5 to 7] WHERE [Application code] LIKE 'BBB' UNION ALL
SELECT * FROM [2019-07-B July 12 to 14] WHERE [Application code] LIKE 'BBB' UNION ALL
SELECT * FROM [2019-07-C July 19 to 21] WHERE [Application code] LIKE 'BBB' UNION ALL
SELECT * FROM [2019-07-D July 26 to 28] WHERE [Application code] LIKE 'BBB' UNION ALL
SELECT * FROM [2019-08-A Aug 2 to 4] WHERE [Application code] LIKE 'BBB' UNION ALL
SELECT * FROM [2019-08-B Aug 9 to 11] WHERE [Application code] LIKE 'BBB' UNION ALL
SELECT * FROM [2019-08-C Aug 16 to 18] WHERE [Application code] LIKE 'BBB' UNION ALL
SELECT * FROM [2019-08-D Aug 23 to 25 Proposed] WHERE [Application code] LIKE 'BBB';
我希望能够一次查询所有 200 多个应用程序代码,并且比每个代码输入相同的字符串 8 次更有效。
解决方案
一种更简单的方法可能是在应用选择标准之前先union
处理表数据,这样您只需在一个地方指定标准,例如:
select * from
(
select * from [2019-07-A July 5 to 7] union all
select * from [2019-07-B July 12 to 14] union all
select * from [2019-07-C July 19 to 21] union all
select * from [2019-07-D July 26 to 28] union all
select * from [2019-08-A Aug 2 to 4] union all
select * from [2019-08-B Aug 9 to 11] union all
select * from [2019-08-C Aug 16 to 18] union all
select * from [2019-08-D Aug 23 to 25 Proposed]
) as t
where
t.[Application code] like 'AAA' or
t.[Application code] like 'BBB'
如果您没有like
在语句的条件中使用通配符运算符,您也可以使用该in
运算符并提供应用程序代码列表:
select * from
(
select * from [2019-07-A July 5 to 7] union all
select * from [2019-07-B July 12 to 14] union all
select * from [2019-07-C July 19 to 21] union all
select * from [2019-07-D July 26 to 28] union all
select * from [2019-08-A Aug 2 to 4] union all
select * from [2019-08-B Aug 9 to 11] union all
select * from [2019-08-C Aug 16 to 18] union all
select * from [2019-08-D Aug 23 to 25 Proposed]
) as t
where
t.[Application code] in ('AAA', 'BBB')
或者,您可以创建一个包含您希望返回的所有应用程序代码的表(在以下示例中,我调用ApplicationCodes
了包含一个名为 的单个字段的此类表Code
),然后使用简单的连接来隐式应用过滤,例如:
select * from
(
select * from [2019-07-A July 5 to 7] union all
select * from [2019-07-B July 12 to 14] union all
select * from [2019-07-C July 19 to 21] union all
select * from [2019-07-D July 26 to 28] union all
select * from [2019-08-A Aug 2 to 4] union all
select * from [2019-08-B Aug 9 to 11] union all
select * from [2019-08-C Aug 16 to 18] union all
select * from [2019-08-D Aug 23 to 25 Proposed]
) as t
inner join ApplicationCodes on t.[Application code] = ApplicationCodes.Code
推荐阅读
- reactjs - 使用 Webpack、typescript、css 模块和 SASS 配置 React 组件库的最佳方法是什么
- python-3.x - 如何解决安装tensorflow时出现的问题:HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out
- geometry - 围绕网格中的一个点缩放:重绘网格并移动“原点”,使光标下的点保持固定
- python - Python:将分钟或秒添加到仅限时间的对象
- java - 我们怎么能在一定范围内,最大次数,一个int能被2整除
- mysql - 从表中删除数据而不创建临时表
- ios - Swift:重构 NSMutableAttributedString
- zk - 如何使用动态文本框创建通信
- mule - Mule 是否支持键中的“-”(连字符)?
- javascript - 带有 JQuery 事件的条码阅读器