为什么在左连接中使用子查询会给出与等效表完全不同的答案?

2024-01-20

我在 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(使用前将#替换为@)

为什么在左连接中使用子查询会给出与等效表完全不同的答案? 的相关文章

  • 司机和提供商之间的区别

    数据库中的驱动程序和提供程序有什么区别 有没有解释一下 不胜感激 样本 ADO NET driver for MySQL vs providerName System Data EntityClient 来自 MSDN 论坛 驱动程序是安装
  • 访问数据库 LIMIT 关键字

    我试图让我的页面列表功能在 ASP 中与 Access 数据库一起工作 但我不知道 Microsoft SQL 中 LIMIT 的替代方案 我已经尝试过 TOP 但这似乎不起作用 这是 MySQL 中使用的语句 SELECT FROM cu
  • SQL Server 2008 R2 内连接无法匹配 varchar 字段,因为它包含特殊字符

    我们正在将 Microsoft SQL Server 2008 R2 用于我们的经典 ASP 应用程序之一 我们有两张表 TableA TableB TableA有以下列 InstName varchar 1024 TableB有这些列 I
  • 作为 UDF 结果的列上的 Where 子句

    我有一个用户定义的函数 例如myUDF a b 返回一个整数 我试图确保该函数仅被调用一次 并且其结果可以用作WHERE clause SELECT col1 col2 col3 myUDF col1 col2 AS X From myTa
  • SQL Android 错误:没有这样的表

    因此 每次我在位于 AddContacts 类中的 EditText 字段中输入数据时 我的对话框都会显示我已成功添加信息 但在日志 cat 中却显示没有这样的表 contactsTable 我认为错误出在我的数据库类中的 onCreate
  • SQL Server 每年的第一个星期一

    如何使用 T SQL 查找 一年中的第一个星期一 这是 ngruson 发布的链接中的示例 http sqlbump blogspot nl 2010 01 first monday of year html http sqlbump bl
  • pyspark.sql.functions.window 函数的“startTime”参数和 window.start 有何作用?

    示例如下 df spark createDataFrame 1 2017 05 15 23 12 26 2 5 1 2017 05 09 15 26 58 3 5 1 2017 05 18 15 26 58 3 6 2 2017 05 15
  • 如何调试参数化 SQL 查询

    我使用 C 连接到数据库 然后使用 Ad hoc SQL 来获取数据 这个简单的 SQL 查询非常方便调试 因为我可以记录 SQL 查询字符串 如果我使用参数化 SQL 查询命令 有没有办法记录 sql 查询字符串以进行调试 我想就是这样的
  • SQL Server 2008 中的全文搜索一步一步

    如何开始使用SQL Server 2008 中的全文搜索 阅读这些链接 SQL SERVER 2008 创建全文目录和全文搜索 http blog sqlauthority com 2008 09 05 sql server creatin
  • 处理大数据表时应该如何使用Hibernate Mapping

    问题定义 我有一个包含大量数据 超过 100 000 行 的数据库表 表结构如下 AppID DocID DocStatus 1 100 0 1 101 1 2 200 0 2 300 1 每个 applicationID 可能有数千个文档
  • SQL Server 2008 GUID 列全为 0

    我希望这是我做的一个简单的傻事 我的数据库中有一个表 设置如下 column name widget guid data type uniqueidentifier allow nulls false default value newid
  • 如何在postgresql中编写有关最大行数的约束?

    我认为这是一个很常见的问题 我有一张桌子user id INT 和一张桌子photo id BIGINT owner INT 所有者是一个参考user id 我想向表照片添加一个约束 以防止每个用户将超过 10 张照片输入数据库 写这个的最
  • 火鸟删除速度很慢

    我正在做这个简单的交易 DELETE FROM ominve01 WHERE CVE OBS IN SELECT CVE OBS FROM minve01 M WHERE M FECHA DOCU lt 31 12 2010 OR FECH
  • 获取从开始日期到结束日期的活跃周数

    我的订阅数据如下所示 数据显示用户何时购买订阅 它有user id subscription id start date and end date 我已经得出wk start and wk end从中 user subscription i
  • 内连接 3 个表

    我正在使用 PHP 和 PDO 我需要重新收集连接 3 个表的信息 photos albums 相册照片 该表具有以下结构 photos photo id int path varchar nick varchar date timesta
  • 在 Oracle 中使用数据透视表的建议

    我需要一份报告 我应该使用数据透视表 报告将按类别分组 使用 case when 语句不好 因为有很多类别 您可以将 Northwind 数据库视为示例 所有类别将显示为列和报告将显示客户在类别中的偏好 我不知道另一个解决方案 并在互联网上
  • 我们可以使用sql列出MS Access数据库中的所有表吗?

    我们可以使用 sql 找到 ms access 中的所有表吗 就像我们在 sql server 中所做的那样 select from sys tables 在sqlite中 SELECT FROM sqlite master where t
  • PostgreSQL WHERE 计数条件

    我在 PostgreSQL 中有以下查询 SELECT COUNT a log id AS overall count FROM Log as a License as b WHERE a license id 7 AND a licens
  • INTEGER 到 DATETIME 的转换与 VB6 不同

    我正在查看一些遗留的 VB6 代码 比我的时代早很多年 它对 SQL 2005 数据库运行查询 它提供了日期限制WHERE子句 其中日期作为整数值给出CLng VB6 中的日期 e g WHERE SomeDateField gt 4006
  • 总结同一个 SQL 表上的两个条件

    给定一个 SQL 表 Transactions ID INT COMPANY ID INT STATUS INT where STATUS IN 0 1 表示免费交易并且STATUS IN 2 3 表示可计费交易 简单的 我希望 ANSI

随机推荐

  • 与单视图应用程序相比,带有 UICollectionView 的 Today Extension 具有不同的行为

    我尝试将集合视图添加到今日扩展 https developer apple com library content documentation General Conceptual ExtensibilityPG Today html指定每
  • 没有 System.Drawing/GDI+ 的 asp.net/c# 中的图像操作

    net 有替代图像处理库吗 我更喜欢托管和开源的东西 我问这个有两个原因 我过去遇到过使用 System Drawing 调试 GDI 错误的困难 我读到 在 ASP NET Web 应用程序中使用 System Drawing 并不是 1
  • Logback + Wildfly 8 - 不正确的模式

    我的 logback wildfly 8 配置有问题 我正在使用简单的 ConsoleAppender appender STDOUT ConsoleAppender encoder PatternLayoutEncoder pattern
  • 获取JPA实体版本的通用方法

    我有一个未知的 JPA 实体 需要知道它的版本 我找不到一种通用的方法来做到这一点 我尝试了元模型 但不知道要传递给 getVersion 方法的内容 Object entity Metamodel metamodel entityMana
  • Mongo 连接泄漏与吗啡

    我有一个Servlet with static Mongo new Mongo and Morphia morphia new Morphia 对象 每一次GET被调用时 我执行以下操作 doGet datastore morphia cr
  • MySQL Workbench 未在钥匙串中保存密码

    使用 Kubuntu 16 10 我将密码保存到 MySQL Workbench 中的密钥环中 检查 将密码存储在钥匙串中 复选框 只要它打开 不要求输入密码 它就可以工作 但是当我重新打开程序时 它会再次提示输入密码 似乎没有多少人有这个
  • 了解“第一个基线”与“基线”自动布局约束

    我创建了如下视图 并使用过添加缺失的约束t 自动添加约束 我是 iOS 世界的新手 我正在尝试配置约束的工作方式 在文档大纲上 我可以看到添加的限制 我点击标签UR尺寸检查员向我展示以下内容 按第一基线与 UL 对齐的约束与按基线与 UL
  • 使用 [NSFileManager URLForUbiquityContainerIdentifier:] 和 [NSFileManager ubiquityIdentityToken] 之间的主要区别是什么?

    我正在尝试将 iCloud 支持添加到我的应用程序中 并且一直在关注 Apple 自己的iCloud 设计指南 http developer apple com library mac documentation General Conce
  • 如何使用过滤函数修复数组布尔错误

    我正在尝试使用过滤器解决布尔错误 我使用过滤数组来解决迭代数组的布尔问题 它适用于一个简单的列表 但是当用于仅从数组中获取大于零的数字时 它再次显示错误 用于填充数组的方法是从标准正态分布中抽取样本 arr2 np array list f
  • 增加显示 HTML 文本的 JTextPane 的字体大小

    假设我有一个显示 HTML 文档的 JTextPane 我希望 按下按钮后 文档的字体大小就会增加 不幸的是 这并不像看起来那么容易 我找到了一种更改整个文档字体大小的方法 但这意味着所有文本都设置为我指定的字体大小 http javate
  • 在 Swift 中将 UnicodeScalar 数组转换为字符串

    我有一个 unicode 标量数组 类型是 UnicodeScalar like let array UnicodeScalar f UnicodeScalar o UnicodeScalar o or let array2 bar uni
  • 出现未定义的参考错误,但 nm 显示符号存在

    我正在使用 libkml 构建一个大型应用程序 我从这里使用 libkml 的 cmake 端口 https github com rashadkm libkml https github com rashadkm libkml 即使该符号
  • 将 SQL SUM 与包含内部 SELECT 的 Case 语句结合使用

    我有两张桌子 一张Orders表包含用户订单列表和OrderShippingCosts表 其中包含基于以下内容的每件商品的运输价格OrderTypeID in the Orders table 我正在运行如下查询来计算总运费 SELECT
  • 如何在 selenium webdriver 中从一个弹出窗口切换到另一个弹出窗口

    我的场景是 主窗口 gt 进行一些活动 单击 保存 按钮 gt 弹出确认窗口 并使用 确定 和 取消 按钮打开 单击确认弹出窗口上的 确定 按钮 gt 使用 确定 按钮打开另一个成功弹出窗口 弹出成功后点击确定按钮 切换到主窗口 PopUp
  • 有限状态机和 FSM 间信令

    对具有本机 因此没有 FSM 生成工具 支持状态机开发的语言的建议执行以及消息 信号的传递 这适用于电信 例如实现这种复杂程度的 FSM 我考虑过 Erlang 但希望得到一些反馈 建议 教程指针 替代方案 特别是基于 Java 的框架 也
  • 如何使用 chrono 包验证我的数据是否是 x 秒前的数据?

    我试图通过查看数据的时间戳来查看我的数据是否是 120 秒旧的 因此我的库项目中有以下小代码正在使用std chrono包裹 uint64 t now duration cast
  • 如何在JavaFX中改变图像的颜色

    我有一个像这样的PNG图像 我想将图像更改为如下所示 我怎样才能在 JavaFX 中做到这一点 由于您不关心它是矢量形状还是位图 因此我将在此处概述使用位图的解决方案 如果您确实想要矢量形状 我相信您需要使用矢量输入才能获得良好的结果 使用
  • Laravel Sync 方法仅发送第二个数据

    这段代码应该从数据库中删除所有旧数据 并在添加新数据时 使用sync 现在我有一个包含用户的项目 并且可以使用复选框将用户链接到项目 因此 在选中复选框时 此功能将触发 但例如当我这么说时user 1 and user 2正在通过此功能添加
  • NSMutableArray 到 std::vector

    是否可以将 NSMutableArray 的内容转换为 std vector 如果是这样 应该在 Objective C 或 C 代码中完成吗 您可以使用任何 Objective C 类型创建向量 例如 要将 NSString 实例存储到向
  • 为什么在左连接中使用子查询会给出与等效表完全不同的答案?

    我在 Access 查询中使用左联接来获取添加了仅适用于几行的列的表 当我使用子查询作为要连接的表时 它会为我提供一个最终表 其中新列的所有行都具有相同的值 当我构建一个提供与子查询完全相同的输出的表时 它会按照我想要的方式工作 如果子查询