小编And*_*y M的帖子

COUNT 行的父 id 等于我们在一个查询中父 id 为 0 的行

我想使用 MySQL 在一个查询中执行以下操作:

  • 抓取一个 parent_id 为 0 的行
  • 抓取我们抓取的具有 parent_id 为 0 的行的 parent_id 的所有行的计数

如何在一个查询中完成此操作?如果您需要更多信息,请告诉我,我很乐意为您提供帮助。我不是创建问题的专家,所以请告诉我您需要什么更多信息。

这是我现在正在做的一个例子:

select id from messages where parent_id=0
Run Code Online (Sandbox Code Playgroud)

进而

select count(id) from messages where parent_id={{previously_chosen_id}}
Run Code Online (Sandbox Code Playgroud)

如何获得一次性查询?就像是...

select id, count(records where parent_id=the id we just asked for)
Run Code Online (Sandbox Code Playgroud)

或者,有没有更好的方法来处理这个问题?你看,目前我必须运行大量查询才能找到计数,而我宁愿一次性完成。

mysql tree hierarchy

10
推荐指数
1
解决办法
3万
查看次数

SQL Server 如何处理缓冲区缓存空间不足的查询数据?

我的问题是 SQL Server 如何处理需要将比可用空间更多的数据量拉入缓冲区缓存的查询?此查询将包含多个连接,因此磁盘上不存在此格式的结果集,它需要编译结果。但即使在编译之后,它仍然需要比缓冲区缓存中的可用空间更多的空间。

我举一个例子。假设您有一个 SQL Server 实例,它有 6GB 的可用缓冲区缓存空间。我运行具有多个连接的查询,读取 7GB 的数据,SQL Server 如何能够响应此请求?它是否将数据临时存储在 tempdb 中?它失败了吗?它是否只从磁盘读取数据并一次编译段?

此外,如果我尝试返回 7GB 的总数据会发生什么,这是否会改变 SQL Server 处理它的方式?

我已经知道有几种方法可以解决这个问题,我只是好奇 SQL Server 在按规定运行时如何在内部处理此请求。

此外,我确信该信息存在于某处,但我一直没有找到它。

sql-server memory database-internals sql-server-2012 buffer-pool

10
推荐指数
2
解决办法
3155
查看次数

没有重复行的左连接

我有两个表叫做recordrecord_history。对于每条记录,可能有多个历史记录。它们可以通过id和 连接record_id。我想record用最近的record_history数据获取所有的条目。我已经创建了这样的查询,

SELECT rec.id, rec.name, rech1.data AS last_history_data
FROM record rec
LEFT OUTER JOIN record_history rech1 ON (rec.id = rech1.record_id)
LEFT OUTER JOIN record_history rech2 ON (rec.id = rech2.record_id AND rech2.ts > rech1.ts)
WHERE rech2.id IS NULL
ORDER BY rec.id DESC
Run Code Online (Sandbox Code Playgroud)

在这里,我通过ts. 只要没有重复的ts条目,这就会起作用。如果最近的时间戳在 中重复record_history,则此查询将返回多于一行的记录。我们如何在左连接上应用限制来限制重复行?

postgresql greatest-n-per-group

10
推荐指数
1
解决办法
3万
查看次数

关于 tempdb 版本存储的问题

今天我们遇到了一个错误:

错误:3967,严重性:17

据我所知,它基本上是“完整版商店”。这提出了一些我难以回答的问题,因为在我的商店,我们以前从未遇到过这个错误:

  • 如果有预设的最大大小(基于总tempdb大小或其他),它是动态的吗?

  • 如果不是,是否有设置可以使其动态化?

  • 我们可以基于此设置警报吗?(即用于跟踪大小等的 DMV)

sql-server tempdb-version-store sql-server-2014

9
推荐指数
1
解决办法
2467
查看次数

在表上添加 PERIOD FOR SYSTEM_TIME 失败

我有:

  • 包含现有数据的表格
  • SQL Server 2016 SP1
  • SQL Server 管理工作室 17.5

我正在使用以下语句使我的表成为临时表:

ALTER TABLE [dbo].[AnalysisCustomRollupsV2JoinGroups]
ADD [SysStartTime] DATETIME2(0) GENERATED ALWAYS AS ROW START HIDDEN CONSTRAINT DF_AnalysisCustomRollupsV2JoinGroups_SysStart DEFAULT GETUTCDATE()  
   ,[SysEndTime] DATETIME2(0) GENERATED ALWAYS AS ROW END HIDDEN CONSTRAINT DF_AnalysisCustomRollupsV2JoinGroups_SysEnd DEFAULT CONVERT(DATETIME2(0), '9999-12-31 23:59:59'),   
PERIOD FOR SYSTEM_TIME ([SysStartTime], [SysEndTime]); 

ALTER TABLE [dbo].[AnalysisCustomRollupsV2JoinGroups]   
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.AnalysisCustomRollupsV2JoinGroupsChanges));
Run Code Online (Sandbox Code Playgroud)

问题:

在我的本地 SQL 实例上,我有很多数据库;查询在其中一些上成功运行非常奇怪,而在其中一些上它给了我以下错误:

消息 13542,级别 16,状态 0,第 51 行 ADD PERIOD FOR SYSTEM_TIME 在表 'dbo.AnalysisCustomRollupsV2JoinGroups' 上失败,因为有打开的记录,期间的开始时间设置为将来的某个值。

有时,当我调试/执行查询时,初始查询运行成功。

我读到,这可能是因为我在表中有现有数据。所以,我改变了这样的逻辑:

  • 创建缓冲表并用所有记录填充它
  • 删除原表中的记录
  • 创建时态表
  • 将记录移回并删除缓冲表

再说一次,在某些数据库上它是可以的,而在其他数据库上则不是。试图解决这个问题,我 …

sql-server t-sql temporal-tables sql-server-2016

9
推荐指数
1
解决办法
6845
查看次数

查找是否有任何行部分匹配字符串

我想查看一个表是否包含给定字符串的任何子字符串。

假设我有一个字符串

somedomain.com 
Run Code Online (Sandbox Code Playgroud)

在数据库中我有:

blabladomain.com
testdomain.com
domain.com
Run Code Online (Sandbox Code Playgroud)

我需要进行一个查询,该查询将返回“domain.com”,因为它是“somedomain.com”的子字符串。

我不知道这在 MySQL 中是否可行。

CREATE TABLE `site_core_antispam_banned_domain` (
`domain_id` int(11) NOT NULL AUTO_INCREMENT,
`domain_name` varchar(255) NOT NULL,
PRIMARY KEY (`domain_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

mysql string string-searching

9
推荐指数
1
解决办法
6万
查看次数

使用“[ ]”通配符将 ](右方括号)与 PATINDEX 匹配

我正在 T-SQL † 中编写自定义 JSON 解析器。

出于解析器的目的,我使用了PATINDEX从标记列表中计算标记位置的函数。在我的情况下,令牌都是单个字符,它们包括以下内容:

{ } [ ] : ,

通常,当我需要找到几个给定字符中的任何一个的(第一个)位置时,我会使用这样的PATINDEX函数:

PATINDEX('%[abc]%', SourceString)
Run Code Online (Sandbox Code Playgroud)

然后,该函数将给我aorb或 or的第一个位置c——以最先找到的为准—— in SourceString

现在我的问题似乎与]角色有关。一旦我在字符列表中指定它,例如像这样:

PATINDEX('%[[]{}:,]%', SourceString)
Run Code Online (Sandbox Code Playgroud)

我的预期模式显然被破坏了,因为该函数从未找到匹配项。看起来我需要一种方法来转义第一个,]以便PATINDEX将其视为查找字符之一而不是特殊符号。

我发现这个问题询问了一个类似的问题:

但是,在这种情况下,]不需要在方括号中简单地指定,因为它只是一个字符,并且可以在不使用方括号的情况下指定。使用转义的替代解决方案仅适用于LIKE而不适用于PATINDEX,因为它使用一个ESCAPE子条款,由前者支持而不是由后者支持。

所以,我的问题是,有没有什么办法去寻找一个]PATINDEX使用[ ]通配符?或者有没有办法使用其他 Transact-SQL 工具模拟该功能?

附加信息

这是我需要使用PATINDEX上述[…]模式的查询示例。这里的模式有效(虽然有点),因为它不包含]字符。我也需要它来工作] …

sql-server t-sql pattern-matching sql-server-2014 string-searching

9
推荐指数
1
解决办法
4714
查看次数

如何在使用向导导入 txt 时将空白导入为空值而不是零

我正在使用导入向导加载文本文件,并且需要整数字段中的空白为空,但只插入零。

如何正确导入?

sql-server import sql-server-2012 integer

8
推荐指数
3
解决办法
1万
查看次数

ID 列上的聚集索引的填充因子为 100 是否可以?

所以我在 SQL Server 中的 ID 列(这是一个自动增量列)上有一个带有聚集索引的表。

是否可以将填充因子设为 100,因为数据将始终使用下一个最新 ID 写入?如果此表中的其他列针对现有 ID 进行大量更新,这是否重要?

此外,删除将如何影响表的碎片?

sql-server best-practices clustered-index fill-factor

8
推荐指数
1
解决办法
3795
查看次数

如何在两个字段上使用 INNER JOIN 更新 SQLITE 列

如何将此查询转换为 SQLite:

UPDATE Table_1 
INNER JOIN Table_2 ON (Table_1.Field1 = Table_2.Field1) 
AND(Table_1.Field2 = Table_2.Field2)
SET Table_1.Field3 = Table_2.Field3
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的。

UPDATE Table_1 
SET Field3 = (SELECT Field3
            FROM Table2
            WHERE (Field1 = Table_2.Field1)
            AND (Field2 = Table_2.Field2))
WHERE Field1 IN (SELECT Table_2.Field1
            FROM Table2
            WHERE (Field1 = Table_2.Field1)
            AND (Field2 = Table_2.Field2)) 
AND Field2 IN (SELECT Table_2.Field2
            FROM Table2
            WHERE (Field1 = Table_2.Field1)
            AND (Field2 = Table_2.Field2)) 
Run Code Online (Sandbox Code Playgroud)

查询有效,但我得到错误的结果。

sqlite java

8
推荐指数
1
解决办法
2万
查看次数