我们如何使用旧语法进行 LEFT JOIN ?

2024-01-27

我们如何使用旧语法进行 LEFT JOIN ?

假设您有一个 User 表和 UserRole 表,并且您在 User 表中保存了 UserRole 的 ID。

以下是检索所有用户名以及具有新表示法的角色名称的查询:

SELECT U.Username, US.[Desc] FROM [User] U
INNER JOIN UserRole US ON U.UserRoleId = US.Id

这是旧的符号:

SELECT U.Username, US.[Desc] FROM [User] U, UserRole US
WHERE U.UserRoleId = US.Id

现在,我们假设所有用户都没有角色,UserRoleId 为 0 或 NULL。

以下是检索所有用户名以及具有新表示法的角色名称的查询:

SELECT U.Username, US.[Desc] FROM [User] U
LEFT JOIN UserRole US ON U.UserRoleId = US.Id

问题是:我们如何使用旧语法做同样的事情,而不使用“JOIN”一词?


运营商是*= and =*(取决于每列位于谓词的哪一侧):

SELECT U.Username, US.[Desc] 
FROM [User] U, UserRole US
WHERE U.UserRoleId *= US.Id

不过,自 SQL Server 2012 以来,这些已被弃用,从那时起,24 年前已停止使用的连接语法就不再具有向后兼容性。 我不知道你为什么要使用这个,但这里有一些理由可以让你远离黑暗面:

改掉的坏习惯:使用旧式的 JOIN https://sqlblog.org/2009/10/08/bad-habits-to-kick-using-old-style-joins

或者,如果您想要一种无需连接或专有语法的替代方法,您可以使用:

SELECT U.Username, US.[Desc] 
FROM [User] U, UserRole US 
WHERE U.UserRoleId = US.Id 
UNION ALL 
SELECT U.Username, NULL 
FROM [User] U 
WHERE NOT EXISTS (SELECT 1 FROM UserRole US WHERE U.UserRoleId = US.Id);

但再一次,为什么还要麻烦呢?LEFT JOIN语法是在 ANSI 92 中引入的,如果您不能在数据库中使用它,那么是时候更改您的数据库供应商,而不是您的语法。

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

我们如何使用旧语法进行 LEFT JOIN ? 的相关文章

  • 授予对视图的 SELECT 权限,但不授予对基础对象的 SELECT 权限

    我经常读到 视图的目的之一是安全性 允许某些用户访问基础表 而其他用户仅访问派生视图 考虑到这一点 我设计了几个向外部用户提供受限数据集的视图 一切都很好 但在实践中这是行不通的 我授予后SELECT对视图的权限 除非我授予 否则用户无法访
  • 从 SQL Server 中的字符串中提取子字符串

    我需要从字符串中提取子字符串的一部分 如下所示 YY 12 Yellow ABC WSA Thisone A SS 4MON DHHE A A 我需要按如下方式提取字符串 Yellow Thisone DHHE 你可以使用这样的东西 dec
  • 如何在 SQL Server 2000 中传递大于 varchar(8000) 的字符串参数?

    如果将字符串参数定义为大小大于 8000 则会出现编译错误 e g The size 9000 given to the type varchar exceeds the maximum allowed for any data type
  • 如何应用非标准 SQL 列排序顺序?

    考虑下表Persons Key Name Type Date Pack 1 Pocoyo KIND 30 11 2011 1 2 Erik MAN 10 10 1980 1 3 Alinda VROUW 12 12 1991 1 4 Pin
  • 是否可以使用不在 GROUP BY 中的 ORDER BY 列?

    正如标题所说 这是我的代码 SELECT material SUM Amount AS Amount RIGHT CONVERT varchar 50 date in 106 8 FROM rec stats GROUP BY materi
  • 搜索并替换字符串 t-SQL

    每个人我都试图编写一个查询来替换末尾出现的所有字符串 我有一些干扰词 确切地说是 104 个 如果它们出现在字符串末尾 则需要将其从字符串中删除 例如 两个干扰词是 Company LLC 以下是一些示例和预期输出 American Com
  • 除了连接之外还有其他方法可以提高性能吗?

    除了连接之外还有其他方法可以提高性能吗 编辑 gbn 相关连接或相关子查询与存在子句哪个更好 https stackoverflow com questions 3305891 为什么没有人提到嵌套循环连接 这不是 JOIN 的 替代 方式
  • 替换 Select 语句中的 NULL 和空字符串

    我有一个专栏可以有NULL或空白区域 即 值 我想用有效值替换这两个值 例如 UNKNOWN 我发现的各种解决方案建议修改表本身内的值 然而 在这种情况下 这不是一个选项 因为数据库用于开发和 或修补得非常差的第三方应用程序 实际上 我认为
  • MYSQL嵌套查询运行速度很慢?

    以下查询不断超时 是否有开销更少的方法来实现相同的功能 UPDATE Invoices SET ispaid 0 WHERE Invoice number IN SELECT invoice number FROM payment allo
  • BCP 语法问题

    总之 我正在尝试编写一个可以每天从 SQL Server 2008 实例上的批处理文件运行的查询 我以前从未使用过 BCP 但在查看了一些在线示例后 我尝试创建一个真正的基本查询来测试计算机上的进程和权限 然后再将选择查询扩展到所需的数据集
  • 需要帮助在 MS Access 中实施完全外部联接

    我无法让查询在 Access 中正常工作 我需要 dbo cardpurchases 和 dbo vendors 上的完整外部联接 以便所有所有供应商都将出现在查询中 无论是否在该供应商处进行购买 但 Access 不支持完全外部联接 我还
  • 单个 sql 查询可以处理 sql server 中的 null 或值日期范围

    使用 SQL Server 2008 我有一个存储过程 其中开始日期和结束日期作为日期范围的输入参数 寻找一个singlesql 查询 其中在 where 子句中有一个开始日期和结束日期 可以处理日期均为空或都有值的两种情况 我不想使用 I
  • 如何授予用户访问 SQL Server 中的 sys.master_files 的权限?

    我需要授予数据库用户读取权限sys master files桌子 我怎样才能做到这一点 目前用户拥有以下权限 Calling SELECT on sys master files返回空结果 我还使用以下命令测试了相同的查询sa用户按预期工作
  • SQL 解析键值字符串

    我有一个像这样的逗号分隔字符串 key1 value1 key2 value2 key3 value3 key1 value1 1 key2 value2 1 key3 value3 1 我想将它解析成一个如下所示的表 Key1 Key2
  • TSQL - 创建从日期表,同时忽略带条件的中间步骤

    我在 MS SQL 服务器中有以下表结构 现在 我想根据以下规则获取每个 id 的 in 日期 如果第二天 23 59 出 和 00 00 进 则忽略这些 如果同一天有 out 和 in 请忽略这些 例如我应该得到以下结果 id in ou
  • 使用子查询与 LEFT JOIN 一起选择 MAX 值

    我有一个获取搜索结果的查询 效果很好 查询成功示例 SELECT individuals individual id individuals unique id TIMESTAMPDIFF YEAR individuals day of b
  • 将存储过程的结果加上额外的列插入表中

    如何在其中插入更多列dbFileListOnly表以及 EXEC 查询 INSERT INTO admindb dbfilelistonly path col1 col2 path EXEC RESTORE FILELISTONLY FRO
  • 如何将特定行保留为查询(T-SQL)的第一个结果?

    我正在编写一个 SQL 查询来获取 Report Builder 3 0 中报表的参数列表 我需要在结果中添加一个带有值 All 的额外行 如下所示 SELECT All UNION SELECT DISTINCT Manager FROM
  • 子查询与连接

    我重构了从另一家公司继承的应用程序的一个缓慢部分 以使用内部联接而不是子查询 例如 WHERE id IN SELECT id FROM 重构后的查询运行速度提高了约 100 倍 50 秒到 0 3 我预计会有改进 但谁能解释为什么它如此剧
  • SQL 查询Where Column = '' 返回表情符号字符

    好的 我有一个包含三列的表 Id Key Value 我想删除所有行Value是空的 因此 我在删除之前编写了要选择的查询 Select from Imaging ImageTag where Value 到目前为止一切都很标准 现在这是奇

随机推荐

  • Android 画布保存总是 java.io.IOException: 打开失败: ENOENT (没有这样的文件或目录)

    我有一个画布应用程序 我正在尝试创建一个签名应用程序Canvas onTouchListener 这是我的保存方法 我尝试将签名保存到图像中 private void save hideMenuBar View content this c
  • Travis 尝试将应用提交到 Google Play 商店时出错

    我首先研究了在 Github 上找到的几个要点 https gist github com lpetre 87a5196d14cf4484f1f2 https gist github com lpetre 87a5196d14cf4484f
  • sphinx4 中的语音识别响应很差

    目前我们正在研究使用 sphinx4 进行语音识别 我们正在努力为听写类型应用程序取得良好的响应 输入是一个 wav 文件 我们希望转录它 我研究了 Sphinx4 提供的 LatticeDemo 和 Transscriber 演示 当我使
  • SBT:依赖其他SBT项目而不发布

    我有一组松散相关的组件 其中一些组件依赖于其他组件 为了具体起见 我们假设我们有组件 common a 和 b common 没有任何依赖项 但所有其他项目都使用 common 此外 a 依赖于 b 所有组件都是用 Scala 编写的 我想
  • 为什么 MVC 在 GET 上使用 Modelstate 而不是提供的模型

    当 MVC 运行时ActionMethod它将填充ModelState字典并使用ModelBinder建立ActionMethod参数 如果有 它对两者都这样做GET and POST 这是有道理的 之后ActionMethod已成功运行
  • JPA 与 HIBERNATE 插入非常慢

    我正在尝试使用 JAP 和 HIBERNATE 将一些数据插入 SQL Server 2008 R2 除了速度非常慢之外 一切都 有效 要插入 20000 行 大约需要 45 秒 而 C 脚本大约需要不到 1 秒 有这个领域的资深人士可以提
  • 针对可怕的 While (True) 循环的最佳重构

    如果您像我一样在 While True 循环处颤抖 那么您一定也已经认真思考了重构它的最佳方法 我见过几种不同的实现 没有一个真正比其他实现更好 例如计时器和委托组合 那么 您想出或看到的重构可怕的 While True 循环的最佳方法是什
  • 使用 LINQ 时“输入字符串的格式不正确”

    我正在尝试做一个FirstOrDefault 查询对象集并抛出一个奇怪的异常 My Code private RecordObject GetRecordByID int recID return objectSet FirstOrDefa
  • 如果特定列中的值不是 pandas 数据框中的整数,则删除行

    如果我有一个数据框并且想要删除其中一列中的值不是整数的任何行 我该怎么做 另一种方法是 如果值不在 0 2 范围内 则删除行 但由于我不确定如何执行其中任何一个操作 我希望有人可以这样做 这是我尝试过的 但没有成功 不知道为什么 df df
  • 为什么 Windows API 中的所有内容都是类型定义的?

    更具体地说 为什么是同一件事typedef在很多情况下都有多个不同的名称 为什么typedef指针类型 有时会模糊逻辑 例如 typedef const WCHAR LPCWSTR PCWSTR 这有什么意义呢 实际上这里发生了一些不同的事
  • 如何使用 gpg 命令行检查密码是否正确

    我正在尝试使用自动化备份duplicity 但是当我测试结果时 我得到 gpg 公钥解密失败 密码错误 我想检查我使用的密码是否实际上是与相应 gpg 密钥关联的密码 但无论如何我在 gpg 命令行选项中都看不到 不要加密或解密任何内容 只
  • 如何使用动态键名解析 JSON?

    我有一个像这样的 JSON 响应 array object1 aa somevalue1 bb somevalue2 cc somevalue3 object2 aa somevalue4 bb somevalue5 cc somevalu
  • Program 类应该是静态的吗? [复制]

    这个问题在这里已经有答案了 创建新的 ASP NET Core 3 项目后 我在 Visual Studio 2019 中收到以下警告 警告 CA1052 类型 Program 是静态持有者类型 但既不是静态的也不是不可继承的 public
  • Android 从媒体播放器中删除快进和快退按钮

    我想从 Android 的媒体控制器中删除快进和快退按钮 谁能帮我这个 我想在我的主要活动中完成它 创建 MediaController 时 请确保将布尔值设置为false在构造函数中 MediaController mediaContro
  • 使用 AppCompatActivity 时 onCreate() 处显示错误

    我将 SDK 更新到 22 Android 5 1 1 然后我使用AppCompactActivity代替Activity 这是 logcat 输出 04 23 13 51 40 524 E AndroidRuntime 3150 java
  • HTML 电子邮件的行高在 Outlook 2010 中不起作用

    Outlook 2010 Outlook 2007 似乎不支持我的 HTML 电子邮件中的行高 在 Outlook 00 和 Outlook 03 中完美运行 我一直在进行一些广泛的谷歌搜索 我发现 HTML CSS 支持图表表明 Outl
  • 使用Camera2(Android版本21)API录制60fps视频

    我正在尝试在 Camera2 android hardware camera2 API 上以 60 或更高 fps 的速率录制视频 最后 我使用以下命令成功以 120fps 进行录制相机约束高速捕获会话 https developer an
  • 使用模拟退火进行图形着色

    我正在尝试使用模拟退火提出图形着色问题的算法 网上有通用算法 但是当我查看它时 我无法理解如何将这个算法应用于这个问题 图中的每个节点必须具有与其邻居不同的颜色 我该如何使用模拟退火算法来实现这一点 这个问题中的 温度 时间表 是什么 请帮
  • Visual Studio 从 UML 图生成代码?

    我正在研究使用 Visual Studio 2015 从 UML 图生成代码 根据我所做的工作 我在生成代码之前创建了用例 活动 序列和类图 当我生成代码时 我发现 Visual Studio 在生成代码时仅引用我的类图 所以我的问题是 V
  • 我们如何使用旧语法进行 LEFT JOIN ?

    我们如何使用旧语法进行 LEFT JOIN 假设您有一个 User 表和 UserRole 表 并且您在 User 表中保存了 UserRole 的 ID 以下是检索所有用户名以及具有新表示法的角色名称的查询 SELECT U Userna