私はインタビューでこの質問に出くわし、私がしたことが正しいかどうか疑問に思っていました. 次の属性を持つテーブル「A」があるとします。
R S T
-----------
a1 b1 c1
a1 b2 c2
a1 b3 c3
a4 b4 c4
そして、与えられた B = {[(projection)R,S (A) NATURAL JOIN (projection) S,T (A) ] NATURAL JOIN (projection)R,T (A)} の関係代数を計算する必要があるとしましょう。
結果はどうなりますか?
これは私が試したものです:
-We know (A) NATURAL JOIN (A) = A
-I did the first set of join within the square bracket. Since we had attribute 'S' in common I just yielded the result to be a table of (R S T) with the same 4 rows of tuples.
-Finally, I joined (R S T) with the second set of join where attributes 'R' and 'T' are common which I assumed will yield R S T again with 4 rows of tuples.
つまり、私のやり方では、B = A になってしまいました。
タプルはまったく考慮しませんでした。2 つのプロジェクション間の共通の属性に基づいて自然な結合を行っただけです。
私はそれが非常にばかげていることを知っています..しかし、私はMySQLでそれを実行しようとしています.そのようなクエリを実行しようとすると、何らかの理由でエラーが発生します:
r1 NATURAL JOIN として dbt2.relationalalgebra から A、B を選択します (r2 として dbt2.relationalalgebra から B、C を選択します)。そして、すべての派生テーブルには独自のエイリアスが必要であるというエラーが表示されます!
自然結合が同じテーブルでどのように機能するかを明確にしてください。
助けてくれてありがとう。