0
select age from person where name in (select name from eats where pizza="mushroom") 

「中」に何を書けばいいのかわかりません。これをどのように解決すればよいですか?

4

3 に答える 3

0

これが私の推測です。集合メンバーシップ記号は関係代数の一部であると想定しています

ここに画像の説明を入力

于 2016-08-30T11:20:11.043 に答える
0

ベース テーブル r、C は r と s の両方の列、x は未使用の名前の場合、

select ... from r where C in s

と同じ値を返します

select ... from r natural join (s) x

を使用するにinは、s が 1 列である必要があります。inC が s の値と等しい場合、r の行については真です。したがって、whereは、C が s の値と等しい r の行を正確に保持します。s には列 C があると仮定したため、whereは C が r の行の C に等しい r の行を正確に保持します。これらは、 によって返される行と同じnatural joinです。

(このような式の場合where- inC が r と s の両方の列ではない場合、この変換は適用されません。同様に、逆変換は特定の条件下でのみ適用されます。)

この特定の翻訳があなたにとってどれほど役立つか、またはそれを単純化できるか複雑化する必要があるかは、使用している SQL と「関係代数」のバリアント、入力式にどのような制限があるか、およびその他の翻訳の決定によって異なります。非常に単純で一般的な翻訳を使用すると、出力はより複雑になりますが、明らかに正しいものになります。途中で多くの特別なケースのルールとアドホックな単純化を使用して翻訳すると、出力はより単純になりますが、答えが正しいという正当化はより長くなります.

于 2016-08-31T17:39:21.907 に答える