1

1対多の関係がある2つのテーブルAとBがあります。

ここで、A からのいくつかのレコードと、B に一致するレコードがあるかどうかを示すこの存在フィールドが必要です。countBにはSQLの実行を遅らせるレコードが多すぎるため、関数を使用したくありません。rownum可能な限り多くの互換性が必要なため、以下のように Oracle のような独自のキーワードを使用したくありません。

select A.*, (
    select 1 from B where ref_column = A.ref_column and rownum = 1
) existence
...
4

2 に答える 2

1

とにかく左結合+カウントを使用します。選択リストの選択ステートメントは複数回実行できますが、結合は1回だけ実行されます。

EXISTS を検討することもできます:

select A.*, case when exists (
    select 1 from B where ref_column = A.ref_column and rownum = 1
) then 1 else 0 end
于 2010-03-10T09:24:14.830 に答える
0

EXISTS句を使用します。B の外部キーがインデックス化されている場合、パフォーマンスは問題になりません。

SELECT *
FROM a
WHERE EXISTS (SELECT 1 FROM b WHERE b.a_id = a.id)
于 2010-03-10T09:13:54.837 に答える