1

我有以下用 MS Access 编写的查询

SELECT DISTINCT Table1.ColumnA, Table1.ColumnB,Table1.ColumnC,Table1.ColumnD,Table1.ColumnE
FROM Table2 
RIGHT JOIN Table1 ON (Table2.ColumnB = Table1.ColumnF) 
WHERE (Table1.ColumnF <>28) OR (Table1.ColumnF<>29)
  1. 尝试带和不带括号
  2. 当我只有一个 where 语句时,262 条记录下降到 160 条记录,正如预期的那样
  3. 当我通过 OR 连接这两个条件时,记录回到 262,显然没有达到预期的效果。即使第一个条件成立,我也不应该回到 262 条记录。

我的问题是我的查询有什么问题,尤其是与 WHERE XXX OR XXX?

其次,RIGHT JOIN 语句是否对后续 WHERE 语句的结果有任何影响。

第三,如果我不能将 RIGHT JOIN 和 WHERE 结合起来,那么将条件应用于依赖 RIGHT JOIN 的查询的最佳方法是什么?

感谢任何帮助!

4

2 回答 2

6

用 AND 替换你的 OR

 WHERE (Table1.ColumnF <>28) AND (Table1.ColumnF<>29) 
于 2012-10-12T13:21:28.763 回答
3

您可以改用它:

WHERE Table1.ColumnF Not In (28,29)

这种方法清楚而简洁地表达了您的意图。既然您已经解决了针对您的条件的ORvs.问题,那么这个建议可能看起来并不是很有用。但是,请记住,当您有更多这样的条件时。将比 4 s 更容易编写和理解。ANDWHERENot In (28,29,32,40,119)AND

于 2012-10-12T14:59:16.473 回答