Questions tagged «query»

编写查询以请求或更改存储在数据库或其他信息管理系统中的信息。问题应包括表和索引的定义,示例数据,预期输出以及特定系统(例如MySQL,PostgreSQL,Oracle,SQL Server,MongoDB)的标记。

3
使用WHERE IN进行删除操作期间发生意外扫描
我有一个类似以下的查询: DELETE FROM tblFEStatsBrowsers WHERE BrowserID NOT IN ( SELECT DISTINCT BrowserID FROM tblFEStatsPaperHits WITH (NOLOCK) WHERE BrowserID IS NOT NULL ) tblFEStatsBrowsers有553行。 tblFEStatsPaperHits已获得47.974.301行。 tblFEStatsBrowsers: CREATE TABLE [dbo].[tblFEStatsBrowsers]( [BrowserID] [smallint] IDENTITY(1,1) NOT NULL, [Browser] [varchar](50) NOT NULL, [Name] [varchar](40) NOT NULL, [Version] [varchar](10) NOT NULL, CONSTRAINT [PK_tblFEStatsBrowsers] PRIMARY KEY CLUSTERED …

3
索引VARCHAR列是一个好主意/方法吗?
我们正在使用PostgreSQL v8.2.3。 有涉及的表:EMPLOYEE和EMAILLIST。 Table 1: EMPLOYEE (column1, column2, email1, email2, column5, column6) Table 2: EMAILLIST (email) 2个表以这种方式连接,如果EMPLOYEE.EMAIL1或EMPLOYEE.EMAIL2没有匹配的条目,则将返回这些行。 SELECT employee.email1, employee.email2, e1.email IS NOT NULL AS email1_matched, e2.email IS NOT NULL AS email2_matched FROM employee LEFT JOIN emaillist e1 ON e1.email = employee.email1 LEFT JOIN emaillist e2 ON e2.email = employee.email2 …

3
如何为一个列选择不同的列而在另一列中选择任何列?
我需要查询一个SQL数据库以查找一列的所有不同值,并且需要另一列的任意值。例如,考虑具有两列的下表,键和值: key value === ===== one test one another one value two goes two here two also three example 我希望从每个不同的键中取回一个任意选择的示例行,也许可以得到以下三行: key value === ===== one test two goes three example 如何在SQL中制定这样的查询?
29 query 

5
查询调优应该是主动还是被动?
作为软件开发人员和有抱负的DBA,我在设计SQL Server数据库时尝试结合最佳实践(我的软件有99%的时间位于SQL Server之上)。在开发之前和开发过程中,我会做出最好的设计。 但是,就像其他任何软件开发人员一样,这里添加了功能,错误以及对需求的更改,这些需求要求更改/创建的数据库对象。 我的问题是,查询调优应该是主动还是被动?换句话说,在对代码/数据库进行大量修改之后的几周内,我是否应该留出一天时间检查查询性能并据此进行调整?即使看起来运行正常吗? 还是我应该意识到,性能低于平均水平的应该是数据库检查并回到众所周知的黑板上? 查询调优可能会花费大量时间,并且取决于最初的数据库设计,它可能带来的收益很小。我对接受的作案手法感到好奇。

1
为什么NOT IN与包含NULL的集合总是返回FALSE / NULL?
我有一个查询(针对Postgres和Informix),其中NOT IN包含一个子查询,该子查询在某些情况下返回NULL值,导致该子句(和整个查询)无法返回任何内容。 理解这一点的最好方法是什么?我认为NULL这是没有价值的事情,因此并不期望查询会失败,但是显然,这不是正确的思考方式NULL。


3
替代字符串或执行过程以防止SQL查询代码重复的替代方法?
免责声明:作为一个只使用数据库的人,请耐心等待。(大多数时候,我会在工作中进行C ++编程,但是每个奇数月我都需要在Oracle数据库中搜索/修复/添加某些内容。) 我一再需要编写复杂的SQL查询,无论是针对临时查询还是针对应用程序内置的查询,其中大部分查询只是重复的“代码”。 用传统的编程语言编写此类可憎的代码会给您带来深重的麻烦,但是我(I)尚未找到任何体面的技术来防止SQL查询代码重复。 编辑: 1,我要感谢对我的原始示例进行了出色改进的回答者。但是,这个问题与我的示例无关。这是关于SQL查询中的重复性。这样,到目前为止的答案(JackP,Leigh)在显示可以通过编写更好的查询来减少重复性方面做得很好。但是即使如此,您仍然面临着一些重复性,这些重复性显然无法消除:这总是使SQL困扰我。在“传统”编程语言中,我可以进行大量重构以最大程度地减少代码中的重复性,但是对于SQL,似乎没有(?)工具允许这样做,除了以重复的方式编写较少的语句。 请注意,我再次删除了Oracle标记,因为如果没有数据库或脚本语言可以支持更多功能,我将非常感兴趣。 这是我今天拼凑而成的一颗宝石。它基本上报告单个表的一组列中的差异。请略读以下代码,特别是。最后是大型查询。我将在下面继续。 -- -- Create Table to test queries -- CREATE TABLE TEST_ATTRIBS ( id NUMBER PRIMARY KEY, name VARCHAR2(300) UNIQUE, attr1 VARCHAR2(2000), attr2 VARCHAR2(2000), attr3 INTEGER, attr4 NUMBER, attr5 VARCHAR2(2000) ); -- -- insert some test data -- insert into TEST_ATTRIBS values ( …

7
在Postgresql查询中有效选择多个连续范围的开始和结束
我在一个表中有大约十亿行数据,其中一个名称和一个介于1-288之间的整数。对于给定的名称,每个int都是唯一的,并且不会出现该范围内的每个可能的整数-因此存在间隙。 此查询生成一个示例案例: --what I have: SELECT * FROM ( VALUES ('foo', 2), ('foo', 3), ('foo', 4), ('foo', 10), ('foo', 11), ('foo', 13), ('bar', 1), ('bar', 2), ('bar', 3) ) AS baz ("name", "int") 我想为每个名称和连续整数序列生成一个查询表,并在其中一行。每个这样的行将包含: 名称 -的值的名字列 开始 -在所述连续序列中的第一个整数 端 -在连续序列的最终值 跨度 - 端-开始+ 1 该查询为上述示例生成示例输出: --what I need: SELECT * …
19 query  postgresql 



3
有关SQL Server 2008 R2中长期运行的查询或死锁的通知?
我想知道是否可以通过死锁发送通知吗?如果是这样,将需要什么查询。我知道SQL Server可以处理死锁,我只想了解有关查询的信息。 我发现以下内容可确定长时间运行的查询: SELECT creation_time ,last_execution_time ,total_physical_reads ,total_logical_reads ,total_logical_writes , execution_count , total_worker_time , total_elapsed_time , total_elapsed_time / execution_count avg_elapsed_time ,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1, ((CASE statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2) + 1) AS statement_text FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st where total_elapsed_time >= …
15 query  deadlock 

4
将多行中的列合并为单行
customer_comments由于数据库设计的缘故,我将某些内容分成了多行,而对于一份报告,我需要将comments每个唯一字段组合id成一行。我以前尝试过使用SELECT子句和COALESCE技巧在此定界列表中进行操作,但是我无法记住它并且一定不能保存它。在这种情况下,我似乎也无法使其工作,只能在单行上工作。 数据如下所示: id row_num customer_code comments ----------------------------------- 1 1 Dilbert Hard 1 2 Dilbert Worker 2 1 Wally Lazy 我的结果需要看起来像这样: id customer_code comments ------------------------------ 1 Dilbert Hard Worker 2 Wally Lazy 因此,每个row_num结果实际上只有一行结果;评论应按的顺序组合row_num。上面的链接SELECT技巧可以使特定查询的所有值作为一行获得,但是我无法弄清楚如何使其作为SELECT将所有这些行吐出来的语句的一部分来工作。 我的查询必须自己遍历整个表并输出这些行。我没有将它们组合成多列,每行一列,因此PIVOT似乎不适用。

1
部分覆盖范围谓词的垂直度估计
目前,我正在尝试弄清楚SQL Server如何评估部分覆盖直方图步骤的范围谓词的基数。 在Internet上,在针对阶跃统计值和阶跃内统计值进行基数估计时,我遇到了一个类似的问题,保罗·怀特(Paul White)给出了一个相当有趣的答案。 根据Paul的回答,用于估计谓词> =和>的基数的公式(在这种情况下,我只对至少120的基数估计器模型感兴趣): 对于>: Cardinality = EQ_ROWS + (AVG_RANGE_ROWS * (F * (DISTINCT_RANGE_ROWS - 1))) 对于> =: Cardinality = EQ_ROWS + (AVG_RANGE_ROWS * ((F * (DISTINCT_RANGE_ROWS - 1)) + 1)) 我根据使用TransactionDate列的范围谓词以及“ 20140614”和“ 20140618”之间的日期时间范围,在AdventureWorks2014数据库的[Production]。[TransactionHistory]表上测试了这些公式的应用。 此范围的直方图步骤的统计信息如下: 根据公式,我计算出以下查询的基数: SELECT COUNT(1) FROM [AdventureWorks2014].[Production].[TransactionHistory] WHERE [TransactionDate] BETWEEN '20140615 00:00:00.000' AND '20140616 00:00:00.000' …

3
查询挑战:根据度量而非行数创建均匀大小的存储桶
我将以尽可能均匀地向固定数量的卡车装载订单来描述问题。 输入: @TruckCount - the number of empty trucks to fill 一套: OrderId, OrderDetailId, OrderDetailSize, TruckId (initially null) Orders由一个或多个组成OrderDetails。 这里的挑战是TruckId为每个记录分配一个。 一个订单不能跨卡车分割。 卡车应尽可能均匀地*装载,以表示sum(OrderDetailSize)。 *平均:最小载重卡车和最大载重卡车之间可实现的最小增量。根据此定义,1,2,3比1,1,4更均匀地分布。如果有帮助,请假装您是统计算法,甚至可以创建高度直方图。 没有考虑最大卡车负载。这些是魔术弹力卡车。但是卡车的数量是固定的。 有一个明显的解决方案是迭代-循环分配订单。 但是可以按照基于集合的逻辑来完成吗? 我的主要兴趣是针对SQL Server 2014或更高版本。但是针对其他平台的基于集合的解决方案也可能很有趣。 这感觉就像Itzik Ben-Gan的领土:) 我的实际应用程序将处理工作负载分配到多个存储桶中,以匹配逻辑CPU的数量。因此,每个存储桶没有最大大小。统计信息具体更新。我只是认为将问题抽象到卡车上作为解决挑战的一种方式会更有趣。 CREATE TABLE #OrderDetail ( OrderId int NOT NULL, OrderDetailId int NOT NULL PRIMARY KEY, OrderDetailSize tinyint NOT NULL, …

3
查询性能调优
当您完成编写查询/存储的proc /函数时,最快速获取一些性能参数的最有用的方法是什么?您是否运行查询并查看实际的执行计划?如果是这样,您要寻找什么?显然,表/索引扫描很成功,但是还有什么呢?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.