我开始时看了“相关问题”,但没有一个与我正在尝试的完全相同。
如果可能的话,我希望我的查询可以更新。
哪个更好?
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
Bare-bones架构如下(显然不是实际代码):
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中提取值,但这不是此查询的直接部分。
答案 0 :(得分:0)
使用内部联接。它应该更高效。 IIRC,这也是可以更新的。
答案 1 :(得分:0)
我认为它们不是同一个查询。在第一个查询中,如果你有1个baz值,它足以满足WHERE条件,你实际上意味着连接结果(baz和blah = value ...)
(您可能需要使用baz的表前缀infornt来使其更清晰)
答案 2 :(得分:0)
视图的第一个版本可以在任何合理的SQL RDBMS中更新。