如何只选择不在另一个表中的行而不获取另一个表的数据-PLSQL

如何只选择不在另一个表中的行而不获取另一个表的数据-PLSQL,sql,join,plsql,oracle-sqldeveloper,Sql,Join,Plsql,Oracle Sqldeveloper,我正在尝试从一个具有特定条件的表中选择所有行。我正在使用oracleplsql 我有两张桌子: 书籍 身份证 名字 页面 身份证 言语 书号 一本书可以有多页。 我想找到所有没有50字页面的书。 我找到的唯一解决方案是做一个左外连接,然后用空值过滤 Select * from Books b LEFT OUTER JOIN Page p on b.id = p.book_id and p.words = 50 where p.words is null 我认为这不是一个好的解决方案,

我正在尝试从一个具有特定条件的表中选择所有行。我正在使用oracleplsql

我有两张桌子:

书籍

  • 身份证
  • 名字
页面

  • 身份证
  • 言语
  • 书号
一本书可以有多页。 我想找到所有没有50字页面的书。

我找到的唯一解决方案是做一个左外连接,然后用空值过滤

Select * from Books b 
LEFT OUTER JOIN Page p on b.id = p.book_id and p.words = 50
where p.words is null
我认为这不是一个好的解决方案,但它是有效的,你知道还有其他方法吗

我不想获取任何关于页面的信息。如果我做一个普通连接,然后我应用这个条件,我得到一本书的N行,我只想得到每本书的1行


谢谢。

您可以调整您的
选择
,使其仅为
b.*

可能更常见的选择是
不存在

select b.*
from Books b 
where not exists (select 1
                  from Page p 
                  where b.id = p.book_id and p.words = 50
                 );
这两种方法应具有相似的性能特征

“不存在”是我需要的条件。我不知道我可以在甲骨文中使用它,谢谢!!!