小编Che*_*ain的帖子

如何将 XML 数组拆分为单独的行(同时保持一致性)

我正在处理这个确切的堆栈交换部分的数据库转储。在我处理它的过程中,我遇到了一个我目前无法解决的问题。

在 XML 文件 Posts.xml 中,内容如下所示

在此处输入图片说明

当然有多行,但这就是一个的样子。转储中已经提供了一个 Tags.xml 文件,这使得该图片中的“Tags”属性实际上应该是它的单独表(多对多)变得更加明显。

所以现在我正试图找出一种如何提取标签的方法。这是我尝试做的:

CREATE TABLE #TestingIdea (
Id int PRIMARY KEY IDENTITY (1,1),
PostId int NULL,
Tag nvarchar (MAX) NULL
)
GO
Run Code Online (Sandbox Code Playgroud)

? 我创建的表来测试我的代码。我已经用标签和 PostIds 填充了它

SELECT  T1.PostId,
        S.SplitTag
FROM (
    SELECT  T.PostId, 
            cast('<X>'+ REPLACE(T.Tag,'>','</X><X>') + '</X>' as XML) AS NewTag
    FROM #TestingIdea AS T
    ) AS T1
CROSS APPLY (
    SELECT tData.value('.','nvarchar(30)') SplitTag
    FROM T1.NewTag.nodes('X') AS T(tData)
    ) AS S
GO
Run Code Online (Sandbox Code Playgroud)

然而此代码返回此错误

XML parsing: line 1, character 37, illegal qualified name character …
Run Code Online (Sandbox Code Playgroud)

xml sql-server xquery string-splitting sql-server-2017

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

何时(或为何)使用 PLPython(3)u

随着我获得更多 PostgreSQL 经验,我开始质疑 PLPython 的存在。它被认为是一种“不受信任”的语言https://www.postgresql.org/docs/10/plpython.html

我想知道的是,何时或为什么有人需要使用它?PLPGSQL 已经是一种非常强大的语言,可以让您做很多事情。这里有人需要使用它吗?如果需要,用途是什么?

postgresql plpgsql plpython

5
推荐指数
1
解决办法
3399
查看次数

获取索引扫描而不是可能的索引搜索?

目前正在学习有关查询优化的一些东西,我一直在尝试不同的查询并偶然发现了这个“问题”。

我正在使用 AdventureWorks2014 数据库,我运行了这个简单的查询:

表结构(取自https://www.sqldatadictionary.com/AdventureWorks2014.pdf):

在此处输入图片说明

SELECT C.CustomerID
FROM Sales.Customer AS C
WHERE C.CustomerID > 100
Run Code Online (Sandbox Code Playgroud)

返回 19,720 行

Sales.Customer 中的总行数 = 19,820

在检查以确保 CustomerID 实际上不仅是表的 PK 还具有聚集索引(但它使用非聚集索引)之后,情况确实如此:

EXEC SP_HELPINDEX 'Sales.Customer'
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

这是执行计划?

https://www.brentozar.com/pastetheplan/?id=B1g1SihGr

我读过当面对大量数据和/或当它返回超过 50% 的数据集时,查询优化器将支持索引扫描。但是该表作为一个整体几乎没有 20,000 行(准确地说是 19,820 行),无论如何它都不是一张大表。

当我运行此查询时:

SELECT C.CustomerID
FROM Sales.Customer AS C
WHERE C.CustomerID > 30000
Run Code Online (Sandbox Code Playgroud)

返回 118 行

https://www.brentozar.com/pastetheplan/?id=Byyux32MS

我得到了一个索引查找,所以我认为这是由于“超过 50% 的情况”但是,我也运行了这个查询:

SELECT C.CustomerID
FROM Sales.Customer AS C
WHERE C.CustomerID > 20000
Run Code Online (Sandbox Code Playgroud)

返回 10,118 行

https://www.brentozar.com/pastetheplan/?id=HJ9oV33zr

它还使用了索引查找,即使它返回了超过 50% 的数据集。

那么这里发生了什么?

编辑:

打开 IO …

index sql-server optimization

4
推荐指数
1
解决办法
2775
查看次数

表中有一个列,但无法从这部分查询中引用它

我一直在学习Postgres(来自SQL Server),这个错误真的让我很困惑。

\n\n

这是带有一些示例数据的代码:

\n\n
create table T (\nID serial primary key,\nA varchar(1),\nB varchar(1),\nC varchar(1)\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x86\x91 测试表。

\n\n
insert into T (A, B, C)\nvalues('A', 'B', 'C'), ('A', 'B', 'C')\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x86\x91 插入重复项

\n\n
delete from T\nwhere ID in (\n    select t.ID\n    from (  select ID, row_number() over (partition by A,B,C order by A,B,C) as rn\n            from T) as t\n    where t.rn < (select max(t.rn) from t)\n    )\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x86\x91 删除重复项并保留最后一个条目。

\n\n

问题在于(select max(t.rn) from t)我假设这是一个菜鸟错误,与在引用带有别名的列时不知道 postgres 语法有关? …

postgresql duplication subquery

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