select age from person where name in (select name from eats where pizza="mushroom")
「中」に何を書けばいいのかわかりません。これをどのように解決すればよいですか?
select age from person where name in (select name from eats where pizza="mushroom")
「中」に何を書けばいいのかわかりません。これをどのように解決すればよいですか?
これが私の推測です。集合メンバーシップ記号は関係代数の一部であると想定しています
ベース テーブル r、C は r と s の両方の列、x は未使用の名前の場合、
select ... from r where C in s
と同じ値を返します
select ... from r natural join (s) x
を使用するにin
は、s が 1 列である必要があります。in
C が s の値と等しい場合、r の行については真です。したがって、where
は、C が s の値と等しい r の行を正確に保持します。s には列 C があると仮定したため、where
は C が r の行の C に等しい r の行を正確に保持します。これらは、 によって返される行と同じnatural join
です。
(このような式の場合where
- in
C が r と s の両方の列ではない場合、この変換は適用されません。同様に、逆変換は特定の条件下でのみ適用されます。)
この特定の翻訳があなたにとってどれほど役立つか、またはそれを単純化できるか複雑化する必要があるかは、使用している SQL と「関係代数」のバリアント、入力式にどのような制限があるか、およびその他の翻訳の決定によって異なります。非常に単純で一般的な翻訳を使用すると、出力はより複雑になりますが、明らかに正しいものになります。途中で多くの特別なケースのルールとアドホックな単純化を使用して翻訳すると、出力はより単純になりますが、答えが正しいという正当化はより長くなります.