0
Table A
はTable B
を参照しています。 Table B
は、Aの各レコードに1つ以上のエントリを持つことがあります.Bでは、ステータスとして列があります。条件を指定して1行を選択します。ステータスがOAまたはOB以外である場合、 ケースステートメントに基づいて複数のテーブルを結合する際に1行を選択する方法
いずれかの行を選択その行を選択し、ステータスが任意の行におけるOAまたはOBの場合、私は Table B
- 3つのエントリが検討
マイクエリ
--lot more table joins already here
LEFT JOIN(
SELECT CASE WHEN EXISTS
(SELECT 1 FROM A a1 INNER JOIN B b1 ON a1.id = b1.id
WHERE b1.status in ('OA','OB'))
THEN (SELECT b1.rcid FROM A a1 INNER JOIN B b1 ON a1.id = b1.id
WHERE b1.status in ('OA','OB'))
ELSE
SELECT TOP 1 b2.rcid FROM A a2 INNER JOIN B b2 ON a2.id = b2.id
END
))Z on z.id=b2.id --again join with table for b2.rcid
は、これは正しい方法ですか?パフォーマンスに影響はありますか?実際にここで強調したいのは、実際には10個のテーブルに参加する必要があり、そのうちの5個には100,000以上のレコードが含まれます。
最初のソリューションは、私を助けます。しかし、別の問題は、前に私のテーブルAには、 "適用"前に結合されたテーブルの行が含まれていない可能性がありますので、このクロス適用はそれらをスキップしますが、テーブルAのレコードも必要です。 – Satheesh
@Sheheesh「外側適用」を使用します。 – shawnt00
はい、私はそれとその作業を試みましたが、それは外部適用を使用することをお勧めします。リンクhttp://stackoverflow.com/questions/6726696/cross-apply-vs-outer-apply-speed-differenceに従って。少なくとも10Kを引き出すlacレコード以上のテーブルを照会しているので、Outerの適用はパフォーマンスに影響します。 – Satheesh