having
句を使用すると、having
の前に評価されますが、返される行の数は後で評価されるようです。修正はおそらくサブクエリですが、それを避けることが可能ならば私はしたいと思います。私はを使用して、no_data_found
を避けています。返される行数と使用時の行数の差
この現象は、11.2.0.1.0、10.2.0.1.0、9.2.0.7.0で発生するので、明らかに意図されていますが、理由はわかりません。以下は簡単に複製可能な例です。
これはなぜ起こるのですか?私はcount(*)
が1
を返すと予想していたでしょう。 documentationから
create table tmp_test1 as
select level as id, level as val
from dual
connect by level <= 1000
;
Table created.
create table tmp_test2 as
select level as id, level as val
from dual
connect by level <= 1000
;
Table created.
select count(*) as count
from tmp_test1 a
join tmp_test2 b
on a.id = b.id
having max(a.val) = max(b.val)
;
COUNT
----------
1000
select 1 as num_rows
from tmp_test1 a
join tmp_test2 b
on a.id = b.id
having max(a.val) = max(b.val)
;
NUM_ROWS
----------
1
何が質問ですか?それは、(SQLを使用して)どのデータベースシステムにとっても完全に合理的かつ予期される動作です! – Mithrandir
@Ben - あなたは何を返すと思いますか? –
@ミスラディール、それとも?私は前にこれを見たことがない...私の質問はなぜですか?返される行の数は、having節が評価されていることを示していますが、なぜ前に評価されたのか分かりません。 – Ben