如果主键不与普通SQL一起出现,则失败

如果主键不与普通SQL一起出现,则失败,sql,primary-key,Sql,Primary Key,假设我们要按类别查找产品 select * from product p where p.category in ('cat1', 'cat2') 如果cat1或cat2中没有产品,并且不幸的是,如果cat1和cat2拼写错误,则此SQL将返回0行。如果这些类别不存在,我想得到一个SQL异常 这里用伪代码演示,请注意保证的使用 select * from product p where p.category in (select c.id from category c where c.id

假设我们要按类别查找产品

select * from product p where p.category in ('cat1', 'cat2')
如果cat1或cat2中没有产品,并且不幸的是,如果cat1和cat2拼写错误,则此SQL将返回0行。如果这些类别不存在,我想得到一个SQL异常

这里用伪代码演示,请注意保证的使用

select * from product p where p.category in 
(select c.id from category c where c.id guaranteed in ('cat1', 'cat2'))
或使用联接而不是子选择。主键现在是一个很容易出错的数字

select p.* from product p 
inner join category c on c.id = p.category
where c.id guaranteed in (56, 234)

如果不是在普通SQL中,Oracle或SQL server是否具有此功能?

在示例中,类别是产品表的一列。那么,如何区分“不存在”(拼写错误)和“没有该类别的产品”:如果没有该类别的产品,则意味着该类别不存在。为什么需要SQL异常?这会告诉您什么是0行不存在的?Raphaël Althaus>类别可能存在,但没有附加任何产品。Bull>>异常会告诉我,我正在尝试使用一个不存在的类别。只需使用一个“普通”SQL查询检查类别是否存在,并使用另一个查询数据即可。我希望您在这些查询背后有一些应用程序?