假设我有一张BOOK表。
具有这种结构:
create table BOOK (
AUTHOR varchar2(100),
TITLE varchar2(100)
);
我想要做的是检查/(或计数,计数(*)= 1)是否存在作者='John Smith'的书,以及是否存在由'John Smith'创作的书籍字母'T'。
我提出了两个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
我的问题是:有没有办法可以让我知道是否存在这样一个标准的书(我需要知道John Snow是否有一本书,以及他是否写了一本书以一封标题开头的书'' T')只执行1次查询?这样执行这1个查询会比从上面执行2个查询更快吗?谢谢!
答案 0 :(得分:2)
select
SIGN(count(*)),
SIGN(count(CASE WHEN TITLE like 'T%' THEN 1 ELSE NULL END)),
from BOOK
where AUTHOR = 'John Snow';
答案 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
。