2011-01-07 113 views
1

我在开始时看到了“相关问题”,但他们中的任何一个都与我正在尝试的完全相同。在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拉动价值为好,但这不是一个直接这个查询的一部分。

回答

0

该视图的第一个版本将在任何合理合规的SQL RDBMS中更新。

0

使用内连接。它应该更高性能。 IIRC,这也是可更新的。

+0

答案取决于SQL语句。如果JOIN版本是可更新的,它可能会更快。如果不是,并且您需要更新,那么IN子查询是更好的版本。但是,这实际上只与绑定的访问表单(它非常相关)或走路和编辑记录集有关。 – 2011-01-08 03:20:33

+0

它将以绑定的形式出现,但是 - 正如我在编辑中所说 - 它实际上只是需要可更新的`foobar.bar`。 – RolandTumble 2011-01-08 18:16:41

+0

我认为我的回答有点仓促,因为@David让我思考。最好多了解一下模式--PK,FK,Unique Indexes ......内联可以多次返回foobar行,其中blahwoof.baz不是唯一的。 – Brett 2011-01-08 23:54:30

0

我认为他们是不一样的查询。在第一个查询中,如果您有1个baz值,则它足以满足WHERE条件,并且您实际上是指连接结果(baz和blah = value ...)

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