假设我有一个表Table1构造类似于下面,其中*是Key
ID* GROUPID* ATTR1 ATTR2 (...additional columns)
-- ------- ----- -----
1 100 45 89
2 100 37 27
3 101 69 19
4 102 37 22
给定ATTR1和ATTR2的一对值,我希望我的查询返回属于给定ATTR1和ATTR2的GROUPID的GroupID的所有行的列表。假设每对ATTR1和ATTR2将具有零个或一个GroupID。
有没有办法将此查询表示为没有嵌套查询(从而加快速度)?这是我到目前为止的查询:
SELECT [GROUPID], [ATTR1], [ATTR2]
FROM [TABLE1]
WHERE [GROUPID] = (
SELECT TOP 1 GROUPID
FROM [TABLE1]
WHERE (ATTR1 = @attr1) and (ATTR2 = @attr2)
);
答案 0 :(得分:1)
您的查询应该没问题。但是,您可以通过将子查询移动到FROM
子句来保证子查询的一次执行:
SELECT t1.GROUPID, t1.ATTR1, t1.ATTR2
FROM TABLE1 t1 JOIN
(SELECT TOP 1 GROUPID
FROM [TABLE1]
WHERE (ATTR1 = @attr1) and (ATTR2 = @attr2)
) tg
ON t1.GROUPID = tg.GROUPID;
为了提高性能,您需要两个索引:TABLE1(ATTR1, ATTR2, GROUPID)
和TABLE1(GROUPID)
。