我有以下簡化架構的行:TSQL查詢找到匹配的一組屬性
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]
FKS到[file].[id]
和[propertyid]
FKS到[property].[id]
。假設[properyid]
是CLUSTERED
而[value]
是NON-CLUSTERED
。
我想選擇所有匹配一定元數據集的文件;例如每個文件的屬性值對爲size = 1 Kb
和extension = '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
)
我可以做的更好呢?
你用什麼版本的SQL Server? – abatishchev 2011-04-22 08:59:05
我認爲我們支持所有版本回到2003年,包括快遞。 – briantyler 2011-04-22 11:51:20
afaik,有2000年,然後是2005年 – abatishchev 2011-04-22 12:26:40