有人可以帮助解释为什么不使用 SQL JOIN 是不好的做法和错误吗? [复制]

2023-12-02

可能的重复:
显式与隐式 SQL 连接
SQL JOIN:USING、ON 或 WHERE 之间有区别吗?

我正在检查由不太熟悉 SQL 的开发人员维护的代码。我在他的代码中经常看到如下片段:

SELECT *
FROM person, status
WHERE person.status_id = status.id

我建议他使用以下内容:

SELECT *
FROM person
INNER JOIN status ON status.id = person.status_id

他指出,在这种特殊情况下,两个查询在相同的时间范围内返回相同的结果(67 毫秒内 34k 行)。在这种情况下,我的新查询没有改变任何内容,这一事实向他证明了这种方法没有任何问题。我尝试向他解释笛卡尔积之类的东西,但他坚持认为这种方法没有任何问题。有人可以帮助提供依赖于此会失败的负面示例,和/或为什么从实现的角度来看这行查询是危险的?


确实,两种形式的语法应该给出相同的结果,并且 MySQL 在内部以完全相同的方式执行它们。当前版本的 SQL 标准支持这两种形式,尽管支持逗号样式只是为了向后兼容。

在某些情况下,使用逗号样式的语法会失败,但它很奇怪:

SELECT * FROM A, B JOIN C ON C.x = A.y;

The JOIN运算符的优先级高于逗号。因此,正如上面的查询试图评估C.x = A.y它甚至不知道A是查询的一部分。所以你会得到一个错误:

ERROR 1054 (42S22): Unknown column 'A.y' in 'on clause'

最好的补救措施是使用JOIN语法一致而不是混合它们。

此外,您不能使用逗号连接语法进行外部连接。 Oracle 和 Sybase/Microsoft 各自发明了自己的专有语法来处理外连接,但其他品牌的 RDBMS 均不支持它们。如今,所有当前版本的 RDBMS(包括 Oracle 和 Sybase/Microsoft)都支持该标准JOIN语法,因此没有充分的理由使用旧的特定于供应商的扩展。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有人可以帮助解释为什么不使用 SQL JOIN 是不好的做法和错误吗? [复制] 的相关文章

  • 是否可以使用“WHERE”子句来选择SQL语句中的所有记录?

    晚上好 我很好奇是否可以在 SQL 语句中创建一个 WHERE 子句来显示所有记录 下面一些解释 随机 SQL 语句 Java JSP示例 正常情况 String SqlStatement SELECT FROM table example
  • MySQL 中的断言

    我有一个针对大型数据库运行的 SQL 脚本 我想在开始时提出几个简单的查询 作为健全性检查 有没有办法在MySQL中写断言 或者任何类型的 选择 如果它与该值不匹配 则中止整个脚本 一些疯狂的代码 要点是 SET可能会引发 mysql 变量
  • MySQL 触发器和 SUM()

    我有两张桌子 学生桌和家庭桌 在学生中 我有列 st venue 和total venue 家里我有收入 Total Revenue 是学生 st 收入与家庭收入之和 其中 family id student student id stud
  • 从数据库生成 XML 时出现 PHP 编码错误 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试获取一个简单的 PHP 服
  • SQL 大表中的随机行(使用 where 子句)

    我有一个网站 人们可以在其中对汽车进行投票 向用户展示 4 辆汽车 他 她可以投票选出他们最喜欢的汽车 桌子cars有重要的列 car id int 10 not auto increment so has gaps views int 7
  • PreparedStatement setnull方法中Types.INTEGER和Types.NULL的区别

    下面的说法有什么区别 PreparedStatement setNull 1 java sql Types NULL and PreparedStatement setNull 1 java sql Types INTEGER 第一个指示驱
  • Sql:计算随时间的增长

    我几周前发布了这个问题 但我认为我没有清楚地提出这个问题 因为我得到的答案不是我想要的 我认为最好重新开始 我正在尝试查询数据库以检索一段时间内唯一条目的数量 数据看起来像这样 Day UserID 1 A 1 B 2 B 3 A 4 B
  • Laravel Sum 列数据库 Eloquent

    尝试获取我的一个表中 int 字段的总和应该非常容易 不幸的是 事实并非如此 因为无论我使用 Laravel MySQL 还是 Excel 我都会得到不同的结果 Laravel 5 4 给了我20506 Table sum field na
  • SQL - 为每条记录调用存储过程

    我正在寻找一种方法来为 select 语句的每条记录调用存储过程 SELECT SomeIds SELECT spro Id FROM SomeTable as spro INNER JOIN Address addr ON addr Id
  • Quartz.NET 设置 MisfireInstruction

    我正在使用 Quartz NET 在 C 中工作 并且在 CronTrigger 上设置失火指令时遇到问题 我正在运行安装了 Quartz DB 的 SQL 后端 我有以下代码 可以很好地创建作业和运行调度程序 IScheduler sch
  • SQL Server 相当于 MySQL 的 USING

    在 MySQL 中 当您连接不同表中具有相同名称的列时 可以在连接中使用关键字 USING 例如 这些查询产生相同的结果 SELECT FROM user INNER JOIN perm USING uid SELECT FROM user
  • 数据表 - 服务器端处理 - 数据库列合并

    我目前正在使用 DataTables 1 10 5 服务器端处理功能 http www datatables net examples data sources server side html http www datatables ne
  • Clojure MySQL 语法错误异常(“[...] 靠近 '???????????????' [...]”)

    除了建立连接之外 我在使用 clojure contrib sql 做任何事情时都遇到困难 我有一个 mysqld 在 localhost 3306 上运行 数据库名为clj db 用户 clj user localhost 和密码 clj
  • 我可以在一个查询中更新/选择表吗?

    我需要在查看页面时选择数据并更新 视图 列 有没有一种方法可以在一个查询中执行此操作 或者我是否必须使用不同的查询 如果您不想 不需要使用事务 则可以创建一个存储过程 该过程首先更新视图计数 然后选择值并将其返回给用户
  • 消息 102,级别 15,状态 1,第 1 行“ ”附近的语法不正确

    我试图从临时表中查询 但不断收到此消息 Msg 102 Level 15 State 1 Line 1 Incorrect syntax near 有人能告诉我问题是什么吗 是因为要转换吗 查询是 select compid 2 conve
  • SQL Group BY,每个组的前 N ​​个项目

    我有一个 SQL 查询 可以获取给定商店中销量最高的 5 件商品 SELECT TOP 5 S UPCCode SUM TotalDollarSales FROM Sales S WHERE S StoreId 1 GROUP BY S U
  • 如何使用 PHP 从 MySQL 检索特定值?

    好吧 我已经厌倦了 过去一周我花了大部分空闲时间试图解决这个问题 我知道 SQL 中的查询已更改 但我无法弄清楚 我能找到的所有其他帖子似乎都已经过时了 如果有人能帮助我 我将非常感激 我想做的就是使用手动输入数据库的唯一 密码 来检索行的
  • 如何使用 PHP 获取列中的所有值?

    我一直在到处寻找这个问题 但仍然找不到解决方案 如何从 mySQL 列中获取所有值并将它们存储在数组中 例如 表名称 客户 列名称 ID 名称 行数 5 我想获取此表中所有 5 个名称的数组 我该如何去做呢 我正在使用 PHP 我试图 SE
  • 案例陈述以确定我是否应该结合

    我目前想做某种条件联合 给出以下示例 SELECT age name FROM users UNION SELECT 25 AS age Betty AS name 假设我只想在 用户 计数 gt 2 时合并第二个语句 否则不合并两者 总之
  • 从一个sql服务器选择到另一个sql服务器?

    我想将一台服务器 Data Old S1 中的一个表 T1 在 DB1 中 中的数据选择到另一台服务器 Data Latest S2 中的另一个表 T2 在 DB2 中 中的数据 我怎样才能做到这一点 请注意服务器的命名方式 查询也应该考虑

随机推荐

  • Java SQL 时间戳到 ZonedDateTime

    我想将 ZonedDateTime 对象转换为 java sql Timestamp 对象 而不使用本地日期 例如 假设我有以下日期时间 System out println myZonedDateTime gt 2018 09 02T23
  • ASP.NET PostBack 选择树视图的复选框

    我有一个 asp net 项目并使用 C 工作 在我的项目中 我有一个带有复选框的数据绑定列表框 例如 当用户单击复选框时 它应该更新标签 文本框 问题是 它不会更新标签 文本框 直到我单击执行回发的按钮 我将如何调用复选框更改事件的回发
  • OpenGL 顶点数组对象存储顶点缓冲区名称和索引,还是仅存储索引?

    创建后 VAO 是否仅跟踪 VBO 索引 通过glBindVertexBuffer 或者哪些 VBO 名称与这些索引绑定 如果我使用指定绑定索引 例如 0glVertexAttribBinding在 VAO 创建期间 我可以在绘制调用之前将
  • 类型错误:列表索引必须是整数,而不是元组,出了什么问题[重复]

    这个问题在这里已经有答案了 Python 新手 求助 为什么我收到此错误 类型错误 列表索引必须是整数 而不是元组 imheight for i in range 0 len tables for j in range 0 len tabl
  • 匿名内部类中的接口如何工作?

    interface MyInter public void display class OuterClass8 public static void main String arg MyInter mi new MyInter public
  • 无法让 Django 提供静态文件

    我知道 SO 上有很多类似的线程 实际上有同样的问题 但我无法解决我的问题 Django版本 gt gt gt import django gt gt gt print django get version 1 6 2 我想从模板访问静态文
  • 如何将 jQuery 事件处理程序附加到 YouTube 电影?

    编辑 对那些已经回答的人表示抱歉 在我睡眠不足的状态下 我忘记了这种特殊情况是 YouTube 电影 而不是 JW FLV 播放器 我可以看到有更多关于与 YouTube 电影交互的文档 所以我会继续研究 但也欢迎提供更多信息 我正在使用
  • while 循环确定输入的值是否为 double

    我正在做一个相当大的项目 这只是包含在其中 基本上 我创建了一个获取员工信息的类 我们需要它 以便用户必须输入双倍的工资率 说 8 点 注意用户不能添加美元符号 例如 8 00 否则会提示用户发生错误 然而 当我测试运行代码时 代码没有使用
  • 如何格式化 Ansible 输出

    我想格式化 Ansible 输出 my local SUCCESS rc 0 gt gt 116G my local2 SUCCESS rc 0 gt gt 116G to my local gt gt 116G my local2 gt
  • 服务器如何因 chmod 777 而变得容易受到攻击?

    我经常读到类似这样的文章 chmod 777 很糟糕 我想知道 当我执行时我如何变得脆弱chmod 777在一个文件上 我可以重现的真实世界示例是什么 It 允许文件系统内容查看和 或修改由任何人 假设攻击者已经具有通用系统访问权限 这在共
  • 如何在Python中以指定位数的二进制字符串形式返回数字

    可能是一个愚蠢的问题 但是在 python 中是否有一种简单的方法可以自动用零将数字填充到固定长度 我在 python 文档中找不到这个 但我可能还不够努力 e i 我希望 bin 4 返回 00100 而不仅仅是 100 是否有一种简单的
  • 确定 WPF RichTextBox 中选定的 InlineUIContainer

    我想确定 WPF RichTextBox 中当前插入符位置是否存在 InlineUIContainer 或 BlockUIContainer 目前我有一个 RichTextBox 如下
  • Message内部逻辑

    我试图找出其中的逻辑Message行为 考虑评估以下内容 On Sin 1 1 评估完以上内容后 您将得到大约 830 Messages in 数学 7 所有这些Messages在生产过程中出现了 Sin argx Sin called w
  • 正则表达式 - 匹配后面没有特定模式的字符

    我想要一个正则表达式 尽可能高效 因为我使用 C 并且引擎效率不高 来匹配任何包含 且不立即跟随的字符串 1 一个字母 a zA Z or 2 NUMBERS a zA Z or 3 数字 a zA Z 所以我想匹配这样的字符串 dsfdf
  • C++ 中的 fseek 函数会刷新缓冲区中的数据吗?

    我们知道 调用 fprintf 或 fwrite 等函数不会立即将数据写入磁盘 而是会缓冲数据直到达到阈值 我的问题是 如果我调用 fseek 函数 这些缓冲数据会在查找新位置之前写入磁盘吗 或者数据仍在缓冲区中 并写入新位置 cheng
  • Qt中线程间通信的实现

    我在实现以下场景时遇到问题 我的问题陈述是这样的 我有 3 个线程 ThreadCamera 用于从相机中抓取帧 用于处理帧的 ThreadProcess 使用 OpenCV 对捕获的图像 帧进行一些图像处理 和用于显示图像的主 GUI 线
  • 如何将图像源设置为哈巴狗模板中的变量?

    在创建电影信息平台时 我想打印图像海报 我无法将图像的来源设置为 pug 中的变量 each movie in movies col md 3 style margin bottom 20px text center img src mov
  • 如何从浏览器意图获取授权令牌?

    抱歉我的英语不好 我会尽力尽可能简单地解释我的问题 我正在尝试制作一个与 Yandex API 配合使用的应用程序 在他们的帮助页面上 我读到您应该从用户登录的应用程序启动浏览器 然后通过注册 URI 回调返回到应用程序 我现在拥有的 Ov
  • Magento 错误:模块“Mage_Api”需要模块“Mage_Core”

    我的生产站点无缘无故地消失了 我知道我安装的最后一个扩展 但那是三天前的事了 我在每个页面上都收到此错误 a 4 i 0 s 46 Module Mage Api requires module Mage Core i 1 s 702 0
  • 有人可以帮助解释为什么不使用 SQL JOIN 是不好的做法和错误吗? [复制]

    这个问题在这里已经有答案了 可能的重复 显式与隐式 SQL 连接 SQL JOIN USING ON 或 WHERE 之间有区别吗 我正在检查由不太熟悉 SQL 的开发人员维护的代码 我在他的代码中经常看到如下片段 SELECT FROM