【发布时间】:2016-02-13 01:04:55
【问题描述】:
我正在尝试在两个表上执行类似于基于列的相交的操作。 这些表格是:
-
LogTag: 一个日志可以有零个或多个标签 -
MatchingRule:匹配规则由一个或多个定义规则的标签组成
一个日志可以有零个或多个与之匹配的规则。我将传入 MatchingRuleID 并期望返回所有符合该规则的日志。
预期结果:匹配LogIDs 的结果集。例如。传入MatchingRuleID = 30 应该返回LogID 101。MatchingRuleID = 31 应该返回LogID 101 & 100。
此外,LogTag 表可能有数百万行,因此首选高效查询。
问题:如何找到所有符合指定规则定义的LogIDs?
架构:
CREATE TABLE dbo.Tag
(
TagID INT,
TagName NVARCHAR(50)
)
INSERT INTO dbo.Tag (TagID, TagName)
VALUES (1, 'tag1'), (2, 'tag2'), (3, 'tag3')
CREATE TABLE dbo.LogTag
(
LogID INT,
TagID INT
)
INSERT INTO dbo.LogTag (LogID, TagID)
VALUES (100, 1), (101, 1), (101, 2), (101, 3), (101, 4), (102, 2), (102, 3)
CREATE TABLE dbo.MatchingRule
(
MatchingRuleID INT,
TagID INT
)
INSERT INTO dbo.MatchingRule (MatchingRuleID, TagID)
VALUES (30, 1), (30, 2), (30, 3), (31, 1)
【问题讨论】:
-
预期结果是什么?
-
@Squirrel,编辑澄清
-
预期结果在哪里?
标签: sql-server tsql sql-server-2012