我在 SQL 表中有以下形式的列 (varchar400):
Info
User ID=1123456,Item ID=6685642
此列用于在我们的数据库中存储产品的属性,所以虽然我只关心 User ID 和 Item ID,但这里可能存储了多余的信息,例如:
Info
Irrelevant ID=666,User ID=123124,AnotherIrrelevantID=1232342,Item ID=1213124
所以我有一个如下的 SQL 查询:
-- convert info column to xml type
; with cte as --imports a library of common table expressions
(
select TOP 1000 cast('<info ' + REPLACE(REPLACE(REPLACE(REPLACE(OtherInformation,' ', ''),',', '" '),'=','="'),'.','') + '" />' as XML) info, --puts the OtherInformation column into well formed XML
ROW_NUMBER() over (order by TableID) id --returns all rows??
FROM Table
WHERE TableEnum=51
)
SELECT DISTINCT UserID from --selects unique user ids from our returned xml
(
select T.N.value('local-name(.)', 'varchar(max)') as Name, --selects all attributes returned in varchar(max) format as Name
T.N.value('.', 'varchar(max)') as Value, id --Selects all values returned
from cte cross apply info.nodes('//@*') as T(N) -- from the XML we created above
) v
pivot (max(value) for Name in ([UserID])) p --creates a pivot table on Name, separating all of the attributes into different columns
现在,这正确地返回了一个列,如下所示:
UserID
1
2
3
4
5
现在我有另一个表,Table2
,它保存用户下的订单。我想使用 UserID 作为对该表的引用,因此我将返回该表上的行,其中我在上面返回的 UserID 等于该表中的行,而不是只返回 UserID。
因此,我们得到的是:
UserID Table2Col Table2Col2
2 Info Info
5 Info Info
5 Info2 Info2
5 Info3 Info3
2 个问题 - 我如何执行 JOIN 或执行子查询来组合两个表,我无法弄清楚如何使用正确的语法来做到这一点。其次,我在上面的查询中写了一些评论,显示了我如何理解查询的工作原理。他们是正确的吗?