1

这个查询是什么意思

  select fname, lname  
  from Owner 
  where not exists 
      (select fname, lname 
            from Trainer)

我的理解是:它从表所有者返回 fname 和 lname,而这些名称在表训练器中不存在?我对吗?

4

3 回答 3

3

Owner找出存在于表中但不存在于表中的人的姓名Trainer

于 2010-12-16T20:40:10.070 回答
2

从表中获取owner表中不存在的每个人的列表是一种非常蹩脚的方式trainer

所以,如果Owner表包含

----------------
fname   | lname
----------------
clark   | kent
lois    | lane
peter   | parker

Trainer 表包含

----------------
fname   | lname
----------------
peter   | parker
hal     | jordan

你应该得到一个结果集:

----------------
fname   | lname
----------------
clark   | kent
lois    | lane

更新

实际上,如果 Trainer 表中有任何记录,您的查询将不会返回任何内容。您可能应该使用:

select fname, lname
from Owners
where not exists (
    select fname, lname 
    from trainers 
    where fname=Owners.fname 
          and lname=Owners.lname
    )
于 2010-12-16T20:41:13.777 回答
1

查询有两个部分:“选择”和“位置”。先看 where 部分:

  where not exists 
      (select fname, lname from Trainer)

如果 Trainer 表中没有任何内容,则此 where 子句评估为“true”,如果存在某些内容,则评估为“false”。现在看看“选择”部分:

  select fname, lname from Owners

这将从“所有者”表中选择所有行。

综上所述:如果(且仅当)Trainer 表中没有任何内容,则查询从 Owner 表中选择所有行——如果有,则绝对没有。

于 2010-12-16T21:21:48.987 回答