私がこれを始めたときに "関連する質問"を見ましたが、それらのどれも私がしようとしているものとまったく同じものではありません。MS Accessに参加またはサブクエリ
可能な限り、私は自分のクエリを更新可能にしたい。
どちらが優れていますか?
SELECT foobar.foo, foobar.bar
FROM foobar
WHERE foobar.baz IN (SELECT blahwoof.baz FROM blahwoof WHERE blahwoof.blah = 'value')
または:
SELECT foobar.foo, foobar.bar
FROM foobar INNER JOIN blahwoof ON foobar.baz = blahwoof.baz
WHERE blahwoof.blah = 'value'
編集
私は完全に上記の列名を修飾しました。私は、foobar
が私が更新を心配していることだけを完全には特定していないことに気づきました。blahwoof
はルックアップテーブルです。
編集2
ベアボーンスキーマ(ない実際のコード、明らかに)次のように:
table foobar
foo Autonumber PK
bar long FK ref gleeblesnort
baz long FK ref blahwoof
table blahwoof
baz Autonumber PK
blah text --'type' designation
私は最終的にもgleeblesnortから値を引っ張っされますが、それは直接ではありませんこのクエリの一部
この特定の例のJOINバージョンも更新可能である必要があります。あなたのポイントは確かですが、INサブクエリはJOINバージョンよりも頻繁に更新可能です。特に、クエリオプティマイザがJOIN文によって返されるレコードの数を正確に判断できない場合は特にそうです。 –
@David、正直言って、私はもともとAccessでこのビューを更新可能にする方法と理由を説明する第2段落を持っていました。しかし、私は間違っていることを発見しました(私は何とかDISTINCTROWが必要という考えを得ていました)ので、最初の段落を残しました。 –
DISTINCTROWでは、一部のSELECT文を編集できないようにすることができますが、それがないと読み込み専用になることはありますが、いつ動作するのか、いつ動作しないのかは予測できません。これは、非編集可能性の原因に完全に依存します。基本的には、ジェットが結合の各側にある行の数を把握できない場合、DISTINCTROWは非常に頻繁に編集可能にすることができます(必ずしもそうとは限りません)。ただし、編集不可能な原因が、ジョインされたSELECTの1つにドメイン集計またはGROUP BYによるものである場合、DISTINCTROWは無効になります。 –