这个查询是什么意思

时间:2010-12-16 20:38:22

标签: mysql not-exists

这个查询意味着什么

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

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

3 个答案:

答案 0 :(得分:3)

查找Owner表中但不在Trainer表中的人员的姓名。

答案 1 :(得分: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
    )

答案 2 :(得分:1)

查询有两部分:'select'和'where'。 先看看哪里部分:

  where not exists 
      (select fname, lname from Trainer)

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

  select fname, lname from Owners

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

将它们组合在一起:查询选择所有者表IF中的所有行(并且仅当在Trainer表中没有任何内容时) - 如果存在则没有任何内容。