假设我有一个BOOK表
的结构:
create table BOOK (
AUTHOR varchar2(100),
TITLE varchar2(100)
);
我要做的是检查/(或count, count(*) = 1)是否存在author = 'John Smith'的书,以及是否存在以字母'T'开头的由'John Smith'撰写的书。
我想出了两个SQL语句。
select count(1)
from BOOK
where AUTHOR = 'John Snow'
and rownum = 1
select count(1)
from BOOK
where AUTHOR = 'John Snow'
and TITLE like = 'T%'
and rownum = 1
我的问题是:是否有一种方法可以让我知道是否存在这样的标准的书(我需要知道是否有一本由约翰·斯诺写的书,他是否写了一本标题以字母"T"开头的书),只执行一个查询?这样,执行这1个查询将比执行上面的2个查询更快吗?谢谢!
嗯,你可以把信息放在两列:
select (case when sum(case when AUTHOR = 'John Snow' then 1 else 0 end) > 0
then 1
else 0
end) as AuthoredByJohnSnow,
(case when sum(case when AUTHOR = 'John Snow' and Name like 'T%' then 1 else 0 end) > 0
then 1
else 0
end) as AuthoredByJohnSnowBookT
from Book
您可以通过将AUTHOR = 'John Snow'
放在where
子句中来提高效率。这显然不会这样做,因此您可以轻松地在select
中添加更多因子。
select
SIGN(count(*)),
SIGN(count(CASE WHEN TITLE like 'T%' THEN 1 ELSE NULL END)),
from BOOK
where AUTHOR = 'John Snow';