【发布时间】:2016-02-29 16:17:16
【问题描述】:
我有一个表 session1,只需要查找使用特定 ID 登录的新条目。
create table session1(name varchar(16),id integer);
insert into session1 values('anshu',20);
insert into session1 values('rohit',21);
insert into session1 values('anshu',21);
insert into session1 values('sonu',21);
insert into session1 values('payal',22);
insert into session1 values('anshu',22);
insert into session1 values('roch',22);
commit;
所有使用 id 21 登录的新用户的不加入查询将如下所示:
select name from session1 where name NOT IN(Select name from session1 where id<>21);
输出将是:
rohit
sonu
谁能告诉我如何使用连接解决它?
【问题讨论】:
-
你为什么需要另一个查询?顺便说一句,不要标记不涉及的产品,Oracle 或 SQL Server?
-
面试官问这个问题是为了解决这个问题。
-
为什么在这里使用连接?只有一张桌子。
-
@ThanosMarkou 只有 1 个表,但它被使用了两次 - 查找使用 id 21 登录并且没有使用任何其他 id 登录的人。也许可以使用外连接?
-
显然面试官希望你显示一个 ANTI JOIN 查询,如你得到的答案所示。这是一种有时在 DBMS 上使用的模式,在 NOT IN 和 NOT EXISTS 上非常慢。在 Oracle 或 SQL Server 中,您不需要这个。询问如何用一个简单的having子句来解决这个问题会是一个更合适的问题。
标签: sql oracle sql-server-2008