除了使用DISTINCT函数之外,是否有更好的方法从一个表中的三列获取所有不同的值?我也尝试了GROUP BY
,但费用似乎没有任何显着差异。
SELECT DISTINCT Table1.Col1, Table2.Col1, Table1.Col3
FROM Table1
INNER JOIN Table2 ON Table1.FK = Table2.ID
WHERE Table1.Foo = 1865 AND Table2.Type = 1
答案 0 :(得分:4)
GROUP BY
用于聚合函数使用; DISTINCT
只是从可见性中移除重复项(基于每行匹配的所有列值)。
如果TABLE2允许与TABLE1记录关联的重复值,则必须使用任一选项。取决于数据和您想要看到的内容,但您可以使用&用于获得TABLE2中最高(使用MAX)或最低(使用MIN)值的聚合函数...
答案 1 :(得分:2)
不,这就是它的完成方式。
虽然,你可以试试:
SELECT DISTINCT Table1.Col1, Table2.Col2
FROM Table1
INNER JOIN Table2 ON Table1.FK = Table2.ID AND Table2.Type = 1
WHERE Table1.Foo = 1865
速度取决于您的数据。
答案 2 :(得分:1)
您是否尝试过对所选字段创建索引?
DISTINCT和GROUP BY的相对成本是有道理的。处理数据的一种方式(也可能是它使用的方式)是按您提供的字段对行进行排序。然后两者之间的区别在于DISTINCT跳过等于前一行的行,而GROUP by碰巧使用相同的相等度量运行计数。
答案 3 :(得分:0)
不,没有,但如果您在此方面遇到性能问题,您可能需要考虑索引。如果您提供更多详细信息,也许我们可以提供帮助
答案 4 :(得分:0)
你可以尝试将'where'中的条件移动到你的连接中,尽管我希望它们会被解析。
如果您尝试提高性能,请向Table1.Foo和Table2.Type
添加索引答案 5 :(得分:0)
create table #temp (col1 int, col2 int, col3 int)
create index temp_index on #temp (col 1)
insert into #temp
SELECT Table1.Col1, Table2.Col1, Table1.Col3
FROM Table1
INNER JOIN Table2 ON Table1.FK = Table2.ID
WHERE Table1.Foo = 1865 AND Table2.Type = 1
select distinct col1, col2, col3
from #temp