2011-08-29 69 views
0

这里返回唯一名称的列表是表:编写一个查询,从表

table A (
id integer  primary key, 
name varchar(20), 
age integer 
) 

的面试问题是:

编写一个查询,从表中返回唯一的名称的列表。

这里是我的解决方案:

select id from A group by name; 

我的问题:这是有效的方法来返回唯一的名称的列表?

+4

您的解决方案根据要求返回'id's,而不是名称。 – Oded

回答

1

不,因为您要返回的是ID,而不是名称。该查询在许多DBMS中不起作用,因为选定的列必须位于group by子句中,或者对其应用聚合函数(如max()sum()等)。

你将需要:

select name from a group by name 

它通常甚至高效如果name列索引。

这样做的另一个常见的方法是:

select distinct name from a 
+0

假设名称列未编入索引 – SecureFish

+2

@Secure,如果'name'列未编入索引,它将运行得更慢。但是这并不能改变你需要名字而不是ID的事实。 – paxdiablo

+0

如果对“名称”进行索引,那么这些查询都不会更有效。无论哪种情况,都必须检索“name”的所有值,并且数据库无法从全表访问的索引中更快地获取这些值。如果你试图找到一个特定的名字,那么索引会使它更有效率。 – Allan

0

我会

SELECT DISTINCT name FROM A 

SELECT name FROM A GROUP BY name 

都被很好的理解去。至于哪一个更快,可能取决于所讨论的RDBMS。

0

选择不同名称FROM A可能是您可以获得的最佳选择。没有获得名单的概念。您可以用链接到数据库的编程语言创建一个列表。