我想使用 MySQL 在一个查询中执行以下操作:
如何在一个查询中完成此操作?如果您需要更多信息,请告诉我,我很乐意为您提供帮助。我不是创建问题的专家,所以请告诉我您需要什么更多信息。
这是我现在正在做的一个例子:
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)
或者,有没有更好的方法来处理这个问题?你看,目前我必须运行大量查询才能找到计数,而我宁愿一次性完成。
我的问题是 SQL Server 如何处理需要将比可用空间更多的数据量拉入缓冲区缓存的查询?此查询将包含多个连接,因此磁盘上不存在此格式的结果集,它需要编译结果。但即使在编译之后,它仍然需要比缓冲区缓存中的可用空间更多的空间。
我举一个例子。假设您有一个 SQL Server 实例,它有 6GB 的可用缓冲区缓存空间。我运行具有多个连接的查询,读取 7GB 的数据,SQL Server 如何能够响应此请求?它是否将数据临时存储在 tempdb 中?它失败了吗?它是否只从磁盘读取数据并一次编译段?
此外,如果我尝试返回 7GB 的总数据会发生什么,这是否会改变 SQL Server 处理它的方式?
我已经知道有几种方法可以解决这个问题,我只是好奇 SQL Server 在按规定运行时如何在内部处理此请求。
此外,我确信该信息存在于某处,但我一直没有找到它。
sql-server memory database-internals sql-server-2012 buffer-pool
我有两个表叫做record和record_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,则此查询将返回多于一行的记录。我们如何在左连接上应用限制来限制重复行?
今天我们遇到了一个错误:
错误:3967,严重性:17
据我所知,它基本上是“完整版商店”。这提出了一些我难以回答的问题,因为在我的商店,我们以前从未遇到过这个错误:
如果有预设的最大大小(基于总tempdb大小或其他),它是动态的吗?
如果不是,是否有设置可以使其动态化?
我们可以基于此设置警报吗?(即用于跟踪大小等的 DMV)
我有:
我正在使用以下语句使我的表成为临时表:
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' 上失败,因为有打开的记录,期间的开始时间设置为将来的某个值。
有时,当我调试/执行查询时,初始查询运行成功。
我读到,这可能是因为我在表中有现有数据。所以,我改变了这样的逻辑:
再说一次,在某些数据库上它是可以的,而在其他数据库上则不是。试图解决这个问题,我 …
我想查看一个表是否包含给定字符串的任何子字符串。
假设我有一个字符串
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) 我正在 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
我正在使用导入向导加载文本文件,并且需要整数字段中的空白为空,但只插入零。
如何正确导入?
所以我在 SQL Server 中的 ID 列(这是一个自动增量列)上有一个带有聚集索引的表。
是否可以将填充因子设为 100,因为数据将始终使用下一个最新 ID 写入?如果此表中的其他列针对现有 ID 进行大量更新,这是否重要?
此外,删除将如何影响表的碎片?
如何将此查询转换为 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)
查询有效,但我得到错误的结果。
sql-server ×6
mysql ×2
t-sql ×2
buffer-pool ×1
fill-factor ×1
hierarchy ×1
import ×1
integer ×1
java ×1
memory ×1
postgresql ×1
sqlite ×1
string ×1
tree ×1