Slide 42
Slide 42 text
リレーショナル問合せ
Copyright © 2023, Oracle and/or its affiliates
42
しかし、⼝座「B」から⼝座「E」まで、最⼤2つまでの中間⼝座
を経由して資⾦が流れた送⾦の⼝座をすべて返すSQL
JOINを書くのは、⾮常に複雑
• この場合、中間⼝座のすべての組み合わせを処理するた
めに、12個の結合と3個の結合を持つSQL⽂が必要に
• 中間⼝座が多くなると複雑さが急激に増加
-- transfers indirectly from 'B' to 'E'
SELECT v1.id as account_id1 , v2.id as account_id2
FROM bank_accounts v1 ,
bank_txns btx,
bank_accounts v2
WHERE (v1.id = btx.from_acc AND v2.id = btx.to_acc)
AND v1.id= 'B' AND v2.id= 'E'
UNION ALL
SELECT v1.id as account_id1 , v2.id as account_id2,
FROM bank_accounts v1 ,
bank_txns btx,
bank_accounts bc2,
bank_txns btx2 ,
bank_accounts v2
WHERE (v1.id = btx.from_acc AND bc2.id = btx.to_acc AND
bc2.id = btx2.from_acc AND v2.id = btx2.to_acc )
AND v1.id= 'B' AND v2.id= 'E'
UNION ALL
SELECT v1.id as account_id1 ,v2.id as account_id2
FROM bank_accounts v1 ,
bank_txns btx,
bank_accounts bc2,
bank_txns btx2 ,
bank_accounts bac4,
bank_txns btx5 ,
bank_accounts v2
WHERE (v1.id = btx.from_acc AND bc2.id = btx.to_acc AND
bc2.id = btx2.from_acc AND bac4.id = btx2.to_acc AND
bac4.id = btx5.from_acc AND v2.id = btx5.to_acc )
AND v1.id= 'B' AND v2.id= 'E'
;