4

テーブルから結果を取得するために使用Postgresしています。SQL を使用して問題を解決したいと考えています。

postgresql クエリが結果を返さない場合、デフォルトの行の結果をいくつか表示したいと考えています。私は Jasper レポートを使用しているため、結果のないイベントをキャッチしてデフォルトの結果を提供するためのツールがあまりありません。

最初のクエリが結果を表示する場合、デフォルトの結果を表示したくありません。現在、UNION を使用しようとしていますが、Unionコマンドの後の 2 番目のクエリは、最初のクエリの結果が 0 の場合にのみ発生するようにしたいと考えています。

これはSQLで実行できますか?

4

3 に答える 3

7

CTEを試すことができます:

with fooresults as
(
select c1, c2 from foo
)

select c1, c2 from fooresults
union
select c1, c2 from blah
where (select count(*) from fooresults)=0

または、カウントせずに空のfooresultsをテストできます:

 where not exists (select 1 from fooresults) 

PSもちろん、CTEをインスタンス化するときに必要な条件を追加できます。

      select c1, c2 from foo where .... <some conditions>
于 2013-04-12T13:24:39.390 に答える
4

countテーブル全体をカウントするため、行の存在を確認するためにa を実行しないでください。代わりに使用するexists

select c1, c2, c3
from t
union
select 1, 2, 3
where not exists (select * from t)
于 2013-04-12T13:30:30.517 に答える
2
SELECT * 
FROM table1
UNION ALL
SELECT *
FROM table2
WHERE 0 = (
   SELECT count(table1.id)
   FROM Table1
   GROUP BY table1.id)

頭では、醜いですが...

于 2013-04-12T13:22:29.700 に答える