在MS Access中加入或子查询

时间:2011-01-07 19:32:45

标签: ms-access join ms-access-2007 subquery

我开始时看了“相关问题”,但没有一个与我正在尝试的完全相同。

如果可能的话,我希望我的查询可以更新。

哪个更好?

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中提取值,但这不是此查询的直接部分。

3 个答案:

答案 0 :(得分:0)

使用内部联接。它应该更高效。 IIRC,这也是可以更新的。

答案 1 :(得分:0)

我认为它们不是同一个查询。在第一个查询中,如果你有1个baz值,它足以满足WHERE条件,你实际上意味着连接结果(baz和blah = value ...)

(您可能需要使用baz的表前缀infornt来使其更清晰)

答案 2 :(得分:0)

视图的第一个版本可以在任何合理的SQL RDBMS中更新。