【发布时间】:2012-02-25 00:28:37
【问题描述】:
大家早上好,我在 Access 2010 中进行查询,我遇到了一个奇怪的行为,所以我想听听您的意见,我们开始吧:
SELECT X.*, L.CodLinea
FROM (
SELECT TOP 1 'LBASE' AS CodLinea, 'Linea Base' AS Descrizione FROM ParametriAzienda
) AS X LEFT JOIN Linee AS L
ON X.CodLinea = L.CodLinea
内部查询总是给出一行,两列应该是这样的:
CodLinea | Descrizione
----------+--------------
LBASE | Linea Base
现在,像上面那样进行左连接应该返回一个行和另一列 L.CodLinea,其值等于“LBASE”或 NULL,具体取决于表 Linee 内部是否有“LBASE”。所以,结果可以是:
X.CodLinea | X.Descrizione | L.CodLinea
+-------------+-----------------+--------------+
LBASE | Linea Base | LBASE
如果值存在,或者
X.CodLinea | X.Descrizione | L.CodLinea
+-------------+-----------------+--------------+
LBASE | Linea Base | null
如果该值不存在。事实上,我得到的是:
X.CodLinea | X.Descrizione | L.CodLinea
+-------------+-----------------+--------------+
LBASE | Linea Base | 0
LBASE | Linea Base | 0
LBASE | Linea Base | 0
LBASE | Linea Base | 0
LBASE | Linea Base | 0
这绝对不可能,因为:a) 我应该只得到一排; b) 0 不等于或不等于 LBASE。如果我使用 WHERE 而不是 LEFT JOIN(类似于 INNER JOIN)或 RIGHT JOIN,则结果是正确的(0 行)。
怎么回事?
编辑:实际上 ParametriAzienda 只有一行,并且 Linee 不包含 LBASE 值。
【问题讨论】:
-
我还在 Jet 4.0 (.mdb) 上对此进行了测试,得到了相同的结果,即这对于 Access 2010 和 ACE (.accdb) 都没有问题。