Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 拆分长查询以获得可读性/可维护性_Sql_Ms Access - Fatal编程技术网

Sql 拆分长查询以获得可读性/可维护性

Sql 拆分长查询以获得可读性/可维护性,sql,ms-access,Sql,Ms Access,我继承了一个Access数据库,它有一个选择50多列的查询。即使在MS Access图形查询设计工具中,也有太多的信息无法处理 我有编程背景,但几乎没有数据库方面的经验 对于这个特殊的问题,我需要来自50多列的数据。有没有比一个庞大的查询更好的方法来获取这些信息 我对如何进行有点不知所措。web上的共识似乎是SQL查询应该保持相对较小且格式良好。我只是不知道当你需要这么多字段的时候如何应用这个原则。我可以将大量简单查询与UNION或INSERT一起使用到临时表中吗?有什么建议或RTFMs吗 编辑

我继承了一个Access数据库,它有一个选择50多列的查询。即使在MS Access图形查询设计工具中,也有太多的信息无法处理

我有编程背景,但几乎没有数据库方面的经验

对于这个特殊的问题,我需要来自50多列的数据。有没有比一个庞大的查询更好的方法来获取这些信息

我对如何进行有点不知所措。web上的共识似乎是SQL查询应该保持相对较小且格式良好。我只是不知道当你需要这么多字段的时候如何应用这个原则。我可以将大量简单查询与UNION或INSERT一起使用到临时表中吗?有什么建议或RTFMs吗


编辑:有关应用程序的更多信息。数据分布在14个表中。我正在抓取数据,将其写入一个外部文件,该文件每行有50多个字段(想想CSV版本的电子表格)


编辑:看起来它包含相关的建议。

如果您从所有列检索数据,那么您可以编写
SELECT*from…
如果一个表中有50列,那么数据库设计最多也有问题。这实际上可能意味着您将不得不处理不那么优雅的解决方案


你真的一次需要所有这些数据吗?如果没有,最好只选择给定时间所需的数据。您应该提供有关实际任务的更多信息。

每次运行查询时,我都会重复大多数关于需要50多列的评论


然而,如果是查询的丑陋让您获得了50多列,这会让您感到悲伤,那么您可以为该查询创建一个视图。它不能消除处理大量数据的事实,但它可以封装一个庞大的、毛茸茸的SQL语句。

如果您的数据来自多个表,您可以使用它将查询分成多个组。

我想您根本不用担心什么。从14个表中提取50个字段以输出到平面文件根本算不上什么。关键是,您有意去规范化数据,因为您需要平面文件输出。顾名思义,这意味着有很多列

正如其他人所说,一个表中有50列是不寻常的(虽然不一定是设计错误),但在您描述的情况下,我看不出有任何问题



简而言之,这听起来像是一个完美的设置,我只是想知道是什么让你认为这是一个问题。

当然,如果有数百列,这实际上可能比选择所有50个所需列(性能方面)更糟糕。此外,对我来说,数百列(或50列)表明模式可能没有关系表……数据来自很多表。我仍在破译FROM部分,该部分包含来自大约14个不同表的十几个连接。不要使用SELECT*,除非您绝对需要每一列,否则请指定@whatispunk-这就是为什么我写了“如果你从所有列中检索数据。”为什么这会给下一票打分?@Ted-OP说查询分布在14个表中,所以执行SELECT*将对性能造成灾难性影响。我认为SELECT*的用途非常有限,不应该被鼓励。此外,你的帖子出现在列表的顶部,我不希望看到未来的求职者在这里结束,并认为这是默认/最佳解决方案。绝对不是针对个人的。查询是否有连接?或者这50多列来自同一个表?老实说,如果你只需要50多列,我想不出一个比它解决的问题更糟糕的“解决方案”。只是好奇,你的编程背景是什么?我问这个问题只是因为我觉得有人说他们几乎没有数据库方面的经验,但有编程经验,这很奇怪。“你在学校吗?”MikeAtlas主要是shell脚本,大量的Python,还有一点C——大约5年的工作,主要是Python API的C++产品。通过培训和职业也不是程序员。我的大部分经验是创建实用程序来修补软件工具。但是,是的,我也不知道到目前为止我是如何避开数据库的:)@Mike-我做了十年的科学编程,甚至不需要说“数据库”。那是很久以前的事了,但即使在今天,在“编程”领域仍有很大一部分数据库的使用是有限的。(工业控制、操作系统、实时信号处理、数值分析等)数据分布在14个表格中。我正在抓取数据,将其写入外部文件。因此,外部文件中的每一行都有50多个字段。丑陋肯定会引起悲伤,我只是很难相信没有更干净的方法来做到这一点。“视图”指的是Access中的图形查询设计工具吗?视图本质上是一个“表”,由给定SELECT语句的结果组成。我不太熟悉在Access中创建它们,但这里有一个页面描述了语法:这是Wikipedia关于一般视图的文章:注意将视图构建为多个查询不会影响性能。如果字段的数量导致了问题,我会质疑它们是否都是必需的,但如果它们是必需的,它们是必需的。视图的Access等价物是保存的查询(在数据库窗口/导航窗格中显示为数据库对象的查询)。我们在后端使用Access JET,而不是SQL Server。我不确定CTE是否由JET支持。但我想我明白了这个概念,很可能就是这样。我在网上看到的示例查询和打印的文档要简短得多。以图形方式设计的查询有点难以接受。老实说,我仍然不确定我应该期待什么,w