gpt4 book ai didi

sql - 用于查找与一组属性匹配的行的 SQL 查询

转载 作者:行者123 更新时间:2023-12-02 23:08:38 24 4
gpt4 key购买 nike

我有以下简化架构:

CREATE TABLE [file]
(
id UNIQUEIDENTIFIER NOT NULL,
uri NVARCHAR(MAX) NOT NULL,
CONSTRAINT PK_file PRIMARY KEY (id ASC) ON [PRIMARY]
)

CREATE TABLE [property]
(
id UNIQUEIDENTIFIER NOT NULL,
name NVARCHAR(MAX) NOT NULL,
CONSTRAINT PK_property PRIMARY KEY (id ASC) ON [PRIMARY]
)

CREATE TABLE [metadata]
(
fileid UNIQUEIDENTIFIER NOT NULL,
propertyid UNIQUEIDENTIFIER NOT NULL,
value NVARCHAR(MAX) NOT NULL,
CONSTRAINT PK_metadata PRIMARY KEY (fileid, propertyid ASC) ON [PRIMARY]
)

其中 [fileid] FK 到 [file].[id][propertyid] FK 到 [property]。 [id]。假设[properyid]CLUSTERED并且[value]NON-CLUSTERED

我想选择与一组特定元数据匹配的所有文件;例如,每个具有 size = 1 Kbextension = 'txt' 属性值对的文件。

我提出的查询(例如指定了三个属性的查询)是这样的:

SELECT [uri] FROM [file] WHERE [id] IN (
SELECT a.[fileid] FROM (
SELECT COUNT(*) [count], [fileid] FROM [metadata]
WHERE ([propertyid] = '597ddddf-afd2-414f-9774-36f067038064' AND
[value] = N'moo') OR
([propertyid] = 'd83d12de-e4bc-4d18-be12-743504df3318' AND
[value] = N'foo') OR
([propertyid] = 'c00c3966-5034-4818-8567-abd660f37f15' AND
[value] = N'boo')
GROUP BY [fileid]
) a
WHERE a.[count] = 3
)

我还能做得更好吗?

最佳答案

;WITH propertylist AS (
SELECT propertyid = '597ddddf-afd2-414f-9774-36f067038064', value = N'moo' UNION ALL
SELECT propertyid = 'd83d12de-e4bc-4d18-be12-743504df3318', value = N'foo' UNION ALL
SELECT propertyid = 'c00c3966-5034-4818-8567-abd660f37f15', value = N'boo'
)
SELECT uri
FROM file
WHERE id IN (
SELECT m.fileid
FROM metadata m
INNER JOIN propertylist p ON m.propertyid = p.propertyid AND m.value = p.value
GROUP BY m.fileid
HAVING COUNT(*) = (SELECT COUNT(*) FROM propertylist)
)

关于sql - 用于查找与一组属性匹配的行的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5753855/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com