SQL 多重外连接(将 t-sql 连接转换为 ANSI 格式)

2024-01-04

我有 3 个表 t1、t2、t3。我想要一个基于以下条件的结果集:t1 在 t2(t1 的所有行)上有外连接,t1 在 t3(t1 的所有行)上有外连接,t2 在 t3(t2 的所有行)上有外连接。如何在单个查询中使用这些外部 3 个联接? 基本上我想将 t-sql 格式查询转换为 ANSI 格式。原始查询是这样的

Select * from t1, t2, t3
where t1.col1 *= t2.col1
  and t1.col2 *= t3.col1
  and t2.col2 *= t3.col2

我设法使用前 2 个连接作为

   Select * 
     from t1
left join t2 on t1.col1 = t2.col1
left join t3 on t1.col2 = t3.col1

这适用于前 2 个条件。但无法合并第三次连接。任何人都可以建议一种方法来实现这一点吗? 提前致谢。


您可以有多种变体,所有变体都具有不同的结果集。其中哪一个的初衷对于其他人来说是很难甚至不可能辨别的:


(变化1- Tobsey的查询,先连接到t2,然后连接到t3,相当于):

SELECT 
    * 
FROM
        t1
    INNER JOIN                                --- or LEFT JOIN
        t2 
            ON  t1.col1 = t2.col1
    LEFT JOIN 
        t3 
            ON  t1.col2 = t3.col1 
            AND t2.col2 = t3.col2     --- this line makes the first LEFT join
                                      --- equal to INNER join

(变化2- 首先加入 t3,然后加入 t2 ):

SELECT 
    * 
FROM
        t1
    INNER JOIN                                --- or LEFT JOIN
        t3 
            ON  t1.col2 = t3.col1 
    LEFT JOIN 
        t2 
            ON  t1.col1 = t2.col1  
            AND t3.col2 = t2.col2 

(变体3a- 首先将 t2 连接到 t3,然后将 t1 连接到该连接):

SELECT 
    * 
FROM
        t1
    LEFT JOIN
            t2 
        LEFT JOIN 
            t3 
                ON  t2.col2 = t3.col2  
        ON  t1.col1 = t2.col1
        AND t1.col2 = t3.col1 

如果替换第一个或第二个,则变体 3 可以有多个子变体LEFT加入一个INNER join.

我猜你想要变体 3a。

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

SQL 多重外连接(将 t-sql 连接转换为 ANSI 格式) 的相关文章

  • SQL 错误:“没有这样的表”

    我试图解决为什么我的代码为所有查询返回 null 的原因 最后发现 sql 查询什么也没有返回 我使用简约代码创建了一个新的 AIR 文档 s WindowedApplication
  • 插入后,数据库中仅插入“字符串”的一个字符

    Below is my table screenshot Data after insertion C 代码 SqlConnection con new SqlConnection connectionsession Con con Ope
  • 在单个 select 语句中多次有条件地求和同一列?

    我有一个表 显示每个月在给定位置的各种类型的部署的员工部署情况 ID Location ID Date NumEmployees DeploymentType ID 例如 一些记录可能是 1 L1 12 2010 7 1 Permanent
  • 串行类型的外键 - 确保始终手动填充

    我有两个表 国家和地区 CREATE TABLE Countries id SERIAL name VARCHAR 40 NOT NULL PRIMARY KEY id CREATE TABLE Regions id SERIAL coun
  • Linq To SQL - 拥有和分组依据

    我下面这个查询工作正常 不过我想使用 Linq 来实现它 select u ID u NAME from Task t join BuildingUser bu ON bu ID BUILDING t ID BUILDING join Us
  • 不带 GROUP BY 的聚合查询

    这个查询似乎在我的旧机器上完美运行 但是 在我的 MySQL 5 7 14 和 PHP 5 6 25 的新机器上 它会抛出错误 致命错误 未捕获异常 PDOException 并带有消息 SQLSTATE 42000 语法错误或访问冲突 1
  • 意外的查询结果

    为什么我从 sql server 得到以下结果 SELECT 12 C1 CONVERT int C2 CASE WHEN THEN equal ELSE not equal END C3 Sql Server Fiddle 演示 http
  • 实现软删除的最佳方法是什么?

    目前在做一个项目 我们要对大部分用户 用户角色 实现软删除 我们决定添加一个is deleted 0 数据库中每个表的字段并将其设置为 1 如果特定用户角色点击特定记录上的删除按钮 现在为了将来的维护 每个SELECT查询需要确保它们不包含
  • 如何识别拼写不同的相似单词

    我想从数据库中过滤掉重复的客户名称 一位客户可能有多个同名但拼写差异不大的系统条目 这是一个示例 名为 Brook 的客户可能有 3 个系统条目 有了这个变化 布鲁克 贝尔塔 布鲁克 贝尔塔 比鲁克 贝尔塔 假设我们将此名称放入一个数据库列
  • 获取带有计数的不同记录

    我有一张桌子personid and msg列 personid msg 1 msg1 2 msg2 2 msg3 3 msg4 1 msg2 我想得到总计msg对于每个personid 我正在尝试这个查询 select distinct
  • 数字表与递归 CTE 生成一系列数字

    为什么使用数字表比使用递归 CTE 动态生成它们要快得多 在我的机器上 给定一张桌子numbers单列n 主键 包含从1到100000的数字 查询如下 select n from numbers 大约需要 400 毫秒才能完成 使用递归 C
  • 从 Getdate() 获取时间

    我想采取Getdate 结果 例如 2011 10 05 11 26 55 000 into 11 26 55 AM 我看过其他地方并发现 Select RIGHT CONVERT VARCHAR GETDATE 100 7 这给了我 11
  • SQL查询查找表的主键?

    我怎样才能找到哪一列首要的关键使用查询来创建表 这是重复的question https stackoverflow com questions 893874 mysql determine tables primary key dynami
  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • MYSQL从每个类别中随机选择一条记录

    我有一个数据库Items表看起来像这样 id name category int 有几十万条记录 每个item可以是 7 种不同的之一categories 对应于categories table id category 我想要一个从每个类别
  • 我不断收到错误“关系 [TABLE] 不存在”

    我一直在尝试查询数据库中的两个表 在服务器资源管理器中 我可以看到两个表 甚至可以看到其中的列 我们将它们称为 Schema table1 和 Schema table2 其中 Schema 的第一个字母大写 我尝试运行以下查询 selec
  • SQL 约束以防止根据列的先前值更新列

    是否可以使用检查约束 或其他一些技术 来防止在更新记录时设置与其先前值相矛盾的值 一个例子是 NULL 时间戳 表明发生了某些事情 例如 file exported 一旦文件被导出并且具有非 NULL 值 就不应再将其设置为 NULL 另一
  • 如何在 SQL Server 中连接

    我的数据库没有特定的列 因此我通过开关在查询中创建了一个列 我需要的是将此列与数据库中的另一列连接起来 select certificateDuration DurationType case when certificateDuratio
  • 使用加权行概率从 PostgreSQL 表中选择随机行

    输入示例 SELECT FROM test id percent 1 50 2 35 3 15 3 rows 你会如何编写这样的查询 平均 50 的时间我可以获得 id 1 的行 35 的时间 id 2 的行 15 的时间 id 3 的行
  • 我是否需要在外键上指定 ON DELETE NO ACTION?

    我有以下与 SQL Server 2012 一起使用的 DDL CREATE TABLE Subject SubjectId INT IDENTITY 1 1 NOT NULL Name NVARCHAR 50 Not NULL CONST

随机推荐

  • Python 中的 2D 网格数据可视化

    我需要可视化一些数据 它是基本的二维网格 其中每个单元格都有浮点值 我知道如何在 OpenCV 中为值分配颜色并绘制网格 但这里的要点是 值太多了 所以几乎不可能做到这一点 我正在寻找一些可以使用渐变的方法 例如 值 5 0 将表示为蓝色
  • React-bootstrap-table 标题列未对齐

    我有以下内容 Node jsx import React from react import Col Row Tab Tabs from react bootstrap import Alerts from Alerts import De
  • 如何在反应中将State设置为新数据?

    我刚刚开始研究 ReactJS 并尝试从 API 检索数据 constructor super this state data false this nextProps axios get https jsonplaceholder typ
  • GUID 与 INT IDENTITY [重复]

    这个问题在这里已经有答案了 可能的重复 您觉得您的主键怎么样 https stackoverflow com questions 404040 how do you like your primary keys 我知道使用 GUID 的好处
  • 在 CSS3 变量定义中使用 SCSS 变量不起作用?

    我正在研究如何将样式应用于客户端项目中的可重用 Angular 组件 看主题 样式 Angular 2 可重用组件库 https stackoverflow com questions 44571437 theme style angula
  • 用于查找两个列表之间差异的库函数 - OCaml

    有没有库函数可以找List1 minus elements that appear in List2 我一直在谷歌上搜索并没有发现太多 似乎没有too自己写的很简单 我编写了一个函数来从列表中删除特定元素 但这要简单得多 let rec d
  • SQL 空间连接

    我有两张表 一张以点作为地理 另一张以多边形作为地理 我可以通过以下查询找到单个点落在哪个多边形 从点表中 DECLARE p geography select p PointGeom from dbo PointTable where I
  • Google Cloud SDK 与 Google Cloud 客户端库

    它们有何不同 每个的用例是什么 我是否可以专门使用一个 例如 如果我更熟悉 NET 我可以使用客户端库 适用于 NET 完成使用 python 和 SDK 可以完成的所有操作 谷歌云SDKhttps cloud google com sdk
  • Haskell 中的简单字数统计

    这是我的第一个 haskell 程序 wordCount 接受单词列表并返回一个元组 其中每个不区分大小写的单词与其使用计数配对 对于改进代码可读性或性能有什么建议吗 import List import Char uniqueCountI
  • ffmpeg 无法识别 Quicktime DV 编解码器

    我在 Mac OSX10 5 上获得了很好的建议 将修改后的 MXF 媒体结构转换为 h264 同时保留多轨音频 但我无法让 ffmpeg 在 Windows 环境中工作 See 这一页 https stackoverflow com qu
  • 如何在谷歌地图多边形内绘制直线

    我使用创建了谷歌地图google map javascript API V3 我正在绘制邮政编码多边形的数量 根据某些条件 多边形具有不同的颜色 现在我想根据某些标准在某些多边形内绘制直线 散列标记 我们怎样才能做到呢 下面是我为绘制多边形
  • PyDev 无法在 Eclipse 中工作

    我最近不得不重置我的 PC 重新启动 Eclipse 后出现此错误 id org python pydev editor PythonEditor 没有编辑器描述符 我尝试寻找解决方案 但其他人喜欢here https stackoverf
  • 创建新的 Google 日历

    我想使用 Android 应用程序在现有帐户上创建新的 Google 日历 例如this http sourceforge net projects lngooglecalsync Windows 应用程序确实如此 该应用程序使用 Gdat
  • 如何更改 :focus 上文本区域的边框颜色

    我想改变焦点上 TEXTAREA 的边框颜色 但我的代码似乎无法正常工作 代码已开启fiddle http fiddle jshell net ffS4S
  • PHP cURL、POST JSON

    我需要发布以下 JSON 代码 但由于某种原因它不起作用 下面是我的代码 fieldString 395609399 the curl request processor function processCurlJsonrequest UR
  • 在并行任务期间跟踪失效的 WebDriver 实例

    我看到一些使用 Selenium WebDriver 运行并行嵌套循环 Web 压力测试的死实例怪异现象 简单的例子是 比如说 点击 300 个独特的页面 每个页面有 100 次展示 我 成功 获得 4 8 个 WebDriver 实例Th
  • 如何在 YouTube 缩略图上叠加播放按钮

    在我正在进行的一个项目中 我们将媒体团队发布的大量 YouTube 视频提取到数据库中 以便我们可以将它们呈现为相关内容 我们希望能够在生成的 YouTube 缩略图上叠加一个播放按钮 以便更明显地表明缩略图代表的是可以播放的视频 我正在寻
  • 有没有办法在Linux平台上编译微软风格的内联汇编代码?

    正如标题中提到的 我想知道有没有办法在 Linux 操作系统 例如 ubuntu 中编译微软风格的内联汇编代码 如下所示 asm mov edi A EMMS 示例代码是内联汇编代码的一部分 可以在win10上使用cl exe编译器成功编译
  • 如何在 Android 中将提示文本置于 EditText 中?

    我需要将提示文本居中EditText在安卓中 我该怎么做呢 为了使提示文本居中以与 EditText 一起使用 您必须确保定义 android ellipsize start 我不知道为什么这会起作用 但确实如此 从个人代码中提取的示例
  • SQL 多重外连接(将 t-sql 连接转换为 ANSI 格式)

    我有 3 个表 t1 t2 t3 我想要一个基于以下条件的结果集 t1 在 t2 t1 的所有行 上有外连接 t1 在 t3 t1 的所有行 上有外连接 t2 在 t3 t2 的所有行 上有外连接 如何在单个查询中使用这些外部 3 个联接