这里返回唯一名称的列表是表:编写一个查询,从表
table A (
id integer primary key,
name varchar(20),
age integer
)
的面试问题是:
编写一个查询,从表中返回唯一的名称的列表。
这里是我的解决方案:
select id from A group by name;
我的问题:这是有效的方法来返回唯一的名称的列表?
这里返回唯一名称的列表是表:编写一个查询,从表
table A (
id integer primary key,
name varchar(20),
age integer
)
的面试问题是:
编写一个查询,从表中返回唯一的名称的列表。
这里是我的解决方案:
select id from A group by name;
我的问题:这是有效的方法来返回唯一的名称的列表?
不,因为您要返回的是ID,而不是名称。该查询在许多DBMS中不起作用,因为选定的列必须位于group by
子句中,或者对其应用聚合函数(如max()
或sum()
等)。
你将需要:
select name from a group by name
它通常甚至更高效如果name
列索引。
这样做的另一个常见的方法是:
select distinct name from a
假设名称列未编入索引 – SecureFish
@Secure,如果'name'列未编入索引,它将运行得更慢。但是这并不能改变你需要名字而不是ID的事实。 – paxdiablo
如果对“名称”进行索引,那么这些查询都不会更有效。无论哪种情况,都必须检索“name”的所有值,并且数据库无法从全表访问的索引中更快地获取这些值。如果你试图找到一个特定的名字,那么索引会使它更有效率。 – Allan
我会
SELECT DISTINCT name FROM A
或
SELECT name FROM A GROUP BY name
都被很好的理解去。至于哪一个更快,可能取决于所讨论的RDBMS。
选择不同名称FROM A可能是您可以获得的最佳选择。没有获得名单的概念。您可以用链接到数据库的编程语言创建一个列表。
您的解决方案根据要求返回'id's,而不是名称。 – Oded