我在 Access 查询中使用左联接来获取添加了仅适用于几行的列的表。当我使用子查询作为要连接的表时,它会为我提供一个最终表,其中新列的所有行都具有相同的值。当我构建一个提供与子查询完全相同的输出的表时,它会按照我想要的方式工作。如果子查询和表看起来相同,为什么它们会给出不同的结果。
我查看了有关表和派生表之间差异的其他问题(我认为我使用子查询得到的),两者之间似乎没有区别。
SELECT *
FROM Table1
LEFT JOIN
(SELECT *, "P" AS PColumn FROM TableX, TableY WHERE TableX.x = TableY.y) AS Table2
ON (Table1.x = Table2.x)
WHERE Table1.X > 2
PColumn 中的每个值都是“P”。当我构建一个看起来与子查询结果完全相同的表并使用它代替子查询时,只有第 5 行的 PColumn 值为“P”,其余均为空,这就是我想要的。子查询和表具有完全相同的值,但外部 SELECT 语句中的输出不同
根据评论推断,这似乎是 MS Access 在评估外连接时使用的 JET 数据库引擎的查询优化器中再次出现的错误,如 Allen Browne 在他的文章中所述here http://allenbrowne.com/BugOuterJoinExpression.html.
考虑以下MCVE https://stackoverflow.com/help/mcve演示该错误:
Table1
+----+
| ID |
+----+
| 1 |
| 2 |
+----+
Table2
+----+
| ID |
+----+
| 1 |
+----+
SQL
select * from table1 left join (select table2.id, "x" as X from table2) q on table1.id = q.id
应该返回:
+-----------+------+---+
| table1.id | q.id | X |
+-----------+------+---+
| 1 | 1 | x |
| 2 | | |
+-----------+------+---+
实际上返回:
+-----------+------+---+
| table1.id | q.id | X |
+-----------+------+---+
| 1 | 1 | x |
| 2 | | x |
+-----------+------+---+
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)