同一张表的双重 JOIN 两次

2023-12-13

我在查询时遇到了一个小问题,我需要对同一个表进行两次双重联接。我有这两张表:

list_couples
|id |p_1      |p_2|
|1  |Topolino |Minnie|
|2  |Pippo    |Pluto|
|3  |Paperino |Paperone|

rank
|year |week |player   |points
|2015 |1    |Paperino |200
|2015 |1    |Pippo    |100
|2015 |1    |Paperone |50
|2015 |1    |Topolino |30
|2015 |1    |Minnie   |30
|2015 |2    |Paperino |300
|2015 |2    |Pippo    |150
|2015 |2    |Paperone |50
|2015 |2    |Pluto    |40

我会通过减少一年中一周两个玩家的总积分来对表 list_pairs 中的情侣(p_1 和 p_2)进行排序。

当一对玩家都在排名表中时,我的查询有效,但如果一个或两个不在排名表中,则不会作为第一周的示例,其中冥王星不在第一周的排名表中。

这是我的查询:

SELECT i.*, r.*, r2.*,
             r.points + r2.points AS sum_points
        FROM list_couples AS l
        LEFT JOIN rank AS r  ON l.p_1=r.player
        LEFT JOIN rank AS r2 ON l.p_2=r2.player
        WHERE r.week='$week'  AND r.year='$year' AND
              r2.week='$week' AND r2.year='$year'
        ORDER BY sum_points DESC

通过这个解决方案,我得到了这个结果 结果

|3 |Paperino |Paperone |2015 |1 |300 |2015 |1 |50 |350
|1 |Topolino |Minnie   |2015 |1 |30  |2015 |1 |30 |60

而不是这个

|3 |Paperino |Paperone |2015 |1 |300 |2015 |1 |50   |350
|2 |Pippo    |Pluto    |2015 |1 |100 |2015 |1 |NULL |100
|1 |Topolino |Minnie   |2015 |1 |30  |2015 |1 |30   |60

我该如何解决?


由于空记录,左连接表上的 where 子句限制正在消除所需的结果...因此,将限制移至连接本身,以便在连接之前应用限制,从而保留空值记录。

SELECT i.*,r.*,r2.*, r.points+r2.points AS sum_points
FROM list_couples AS l
LEFT JOIN rank AS r ON l.p_1=r.player
  and r.week='$week' AND r.anno='$anno' 
LEFT JOIN rank AS r2 ON l.p_2=r2.player
  and  r2.week='$week' AND r2.anno='$year'
ORDER BY sum_points DESC

因为 pluto 没有周/年 (anno),所以 where 子句会消除该记录。通过将限制移动到连接,过滤器将在连接发生之前应用,从而保留 LEFT 外部连接。

换句话说,WHERE 子句使左连接成为内部连接!

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

同一张表的双重 JOIN 两次 的相关文章

  • 如何使用wireshark清晰捕获mysql查询sql

    因为我们使用远程开发Mysql服务器 所以不能轻易检查查询sql 如果使用本地服务器可以tail f general log file查看调用某个http接口时执行了哪些sql 所以我安装了一个wireshark捕获这些从本地发送的查询sq
  • 如何将行变成列?

    我有一个数据库 其中存储分组到项目中的关键字以及与每个关键字相关的数据 然后我显示每个项目的数据网格 每个关键字一行和几列 全部从同一个表 数据 中检索 我有 4 个表 关键字 项目 group keywords 和数据 keywords
  • 如何将 MySQL 查询输出保存到 Excel 或 .txt 文件? [复制]

    这个问题在这里已经有答案了 如何将 MySQL 查询的输出保存到 MS Excel 工作表 即使只能将数据存储在 txt文件 就可以了 From 将 MySQL 查询结果保存到文本或 CSV 文件中 http www tech recipe
  • oursql 中的参数化查询

    如果有人能告诉我是否可以使用命名占位符进行参数化查询 我将不胜感激oursql 一个用于与 MySQL 数据库交互的 python 模块 例如 我尝试了一种可以与 sqlite3 一起使用的查询 c execute select from
  • MySQL 数据库无法在 XAMPP for Mac 上启动

    突然我在 mac 上遇到了这个问题 我无法启动我的 MySQL 数据库 我只能启动 ProFTPD 和 Apache Web Server 这是应用程序日志 Starting all servers Starting MySQL Datab
  • MySQL 左连接 WHERE table2.field = "X"

    我有以下表格 pages Field Type Null Key Default Extra page id int 11 NO PRI NULL auto increment type varchar 20 NO NULL
  • 在同一查询中选择 Count of ip 和 Count of DISTINCT ip

    我有一个这样的表结构 TABLE NAME counter id datetime url ip 1 2013 04 12 13 27 09 url1 ip01 2 2013 04 13 10 55 43 url2 ip02 3 2013
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • meta_query,如何使用关系 OR 和 AND 进行搜索?

    已解决 请参阅下面的答案 我有一个名为的自定义帖子类型BOOKS 它有几个自定义字段 名称为 TITLE AUTHOR GENRE RATING 我该如何修复我的meta query下面的代码以便仅books在自定义字段中包含搜索词 tit
  • 如何删除 MySQL 数据库?

    你可能从我的上一个问题中注意到一个问题引发了更多的问题 在 MySQL 监视器中阅读 MySQL 手册 https stackoverflow com questions 1081399 我的数据库现在无法使用 部分原因是我想破坏东西并且无
  • 显示和随机化 php 数组

    我有一个显示结果的数组 如下所示 Array 0 gt 71 1 gt 56 2 gt 64 3 gt 82 4 gt 90 5 gt 80 6 gt 65 7 gt 62 8 gt 14 9 gt 3 我的代码是 while row my
  • MySQL:如何仅获取正值的平均值?

    假设我有 INT 列 并且我使用 1 来表示插入时没有可用数据 我想获得该列中所有 0 或更大值的平均值 这可能吗 Thanks 我忘了提及 我正在与其他 AVG 一起执行此操作 因此从选项卡中选择 avg a avg b avg d 所以
  • 使用 MYSQL 将 h:mm pm/am 时间格式插入数据库

    我正在尝试将以 h mm am pm 格式写入的时间插入到存储为标准 DATETIME 格式 hh mm ss 的数据库中 但我不知道如何将发布的时间转换为标准格式所以数据库会接受它 这是我到目前为止一直在尝试的 title POST in
  • 使用什么框架来引导我的第一个生产 scala 项目?

    我正在第一次涉足 scala 的生产应用程序 该应用程序当前打包为 war 文件 我的计划是创建 scala 编译工件的 jar 文件 并将其添加到 war 文件的 lib 文件夹中 我的增强功能是通过 Jersey 公开的 mysql 支
  • 如何对 SQL 进行多次查询

    我正在尝试创建一个表 并在 PHP 脚本的帮助下在数据库中插入一些值 虽然只插入 1 行 但效果很好 当我尝试输入更多行数时 出现错误 我需要为每个查询编写完整的插入语句 因为我正在使用在线 Excel 到 SQL 查询转换器
  • 拥有更多列或更多行会更高效吗?

    我目前正在重新设计一个可能包含大量数据的数据库 我可以选择在数据库中包含许多不同的列或使用大量行 如果我在下面做一些大纲 可能会更容易 item id user id title description content category t
  • 来自数据库的 jfreechart 散点图

    如何使用java中的jfreechart绘制mysql数据库表中数据的散点图 我使用过 Swing 库 任何链接都会有帮助 我搜索了谷歌但找不到理解的解决方案 如果您有代码 请提供给我 实际上我确实做了条形图并使用 jfreechart 绘
  • 重写 URL,将 ID 替换为查询字符串中的标题

    我对 mod rewrite 很陌生 但我做了一些搜索 但找不到这个问题的答案 我有一个网站 它只有一个 PHP 页面 根据查询字符串中传递给它的 ID 提供数十页内容 我想重写 URL 以便此 ID消失并替换为从数据库中提取的页面标题 例
  • 查询为空 Node Js Sequelize

    我正在尝试更新 Node js 应用程序中的数据 我和邮递员测试过 我的开发步骤是 从数据库 MySQL 获取ID为10的数据进行更新 gt gt 未处理的拒绝SequelizeDatabaseError 查询为空 我认识到 我使用了错误的
  • phpActiveRecord 日期时间格式不正确

    当尝试使用 phpActiveRecord 在表中创建记录时 出现以下错误 Invalid datetime format 1292 Incorrect datetime value 2013 06 20 11 59 08 PDT for

随机推荐

  • 每像素碰撞 - 代码解释

    我目前正在尝试了解每像素碰撞检测 这是我不明白的代码 static bool IntersectPixels Rectangle rectangleA Color dataA Rectangle rectangleB Color dataB
  • Microsoft Office Excel 无法访问文件“c:\inetpub\wwwroot\Timesheet\App_Data\Template.xlsx”

    我的代码如下 Microsoft Office Interop Excel Application oXL null Microsoft Office Interop Excel Sheets sheets Application exce
  • 奇数按降序排列,偶数按升序排列

    给定一个随机整数数组 将奇数元素按降序排序 偶数元素按升序排序 输入示例 1 4 5 2 3 6 7 Output 7 5 3 1 2 4 6 针对时间复杂度进行优化 它是哪种语言 C 或 C 我看到两个标签 在 C 中 您可以使用std
  • 这是 async-await 如何工作的正确图表吗?

    我将尝试就以下问题发表演讲async await我正在创建一个流程图 试图显示可能的执行顺序 我试图根据这些段落来确定这一点 异步方法的开头就像任何其他方法一样执行 方法 也就是说 它同步运行 直到遇到 等待 或 抛出异常 await 关键
  • 为什么我在 JavaScript 中点击按钮后该值显示然后又消失?

    每当我单击按钮时 我都会在文本字段 结果 中得到一秒钟的输出 然后它就消失了 为什么它消失了 我试图将该功能放在身体中 它没有帮助
  • 对 pthread 互斥体涉及的完整内存屏障的澄清

    我听说在处理互斥锁时 必要的内存屏障是由 pthread API 本身处理的 我想了解有关此事的更多细节 这些说法是真的吗 至少在最常见的架构上是这样吗 编译器是否能够识别这种隐式屏障 并在生成代码时避免对操作 从本地寄存器读取进行重新排序
  • mysqldump 没有数据库名称

    是否可以以 xml 格式转储数据 而输出中不包含数据库名称 如果我使用 xml 选项转储这样的输出 gt mysqldump xml my database name my table gt my table xml 然后我的输出是这样的
  • 如何使用 UDID 或设备令牌进行安全登录?

    所以我正在制作一个应用程序 我希望用户能够添加 编辑和评价内容 但我不想强迫他们注册 相反 我计划仅使用他们的设备 ID 或设备令牌来识别他们 我计划同时制作 iPhone 和 Android 版本 因此我正在寻找通用解决方案 但 iPho
  • JSF - 即使退出应用程序后,我的 backbean 的字段也没有被清理

    我是 JSF 的初学者 遇到以下问题 我有一个带有 backbean 的视图 我填充了一些值来执行搜索并显示结果 当我出去并返回应用程序时 最新请求的值仍保留在那里 我在我的 bean 中使用以下注释 Component requestBe
  • Java 8 LocalDateTime 正在解析无效的日期时间

    我想在客户端验证日期时间 所以我编写了以下代码 但我没有得到异常 而是得到了 2 月 31 日日期字符串的正确日期时间对象 这显然是一个无效日期 public class Test public static void main Strin
  • Azure Database for MySQL - webapp Nodejs

    所以我一直在使用本地 mysql 工作台开发一个网络应用程序 我最近将数据库移至 Azure Database for MySQL 在我离开当地之前 一切都运转正常 我的所有网页都工作正常 现在 4 个页面中只有 2 个可以工作 当我单击损
  • Google 地图 API - 获取我的自定义地图 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我在 Google API 中搜索下载地图的方法 google com mymaps 我所说的下载地图是指 POI 除了 Google 地图引擎 a
  • 如何将加号与字符类一起使用作为正则表达式的一部分?

    在 cygwin 中 这不会返回匹配项 echo aaab grep ab 但这确实返回一个匹配项 echo aaab grep ab ab aaab 这两个表达方式不一样吗 有没有办法表达 字符类的一个或多个字符 而无需输入字符类两次 如
  • 需要显式转换以指向 void 指针[重复]

    这个问题在这里已经有答案了 我有以下函数签名 int foo void 我试图给它一个指向char指针 即char 我的编译器抱怨以下警告 argument of type char is incompatible with paramet
  • 由于缺少 libmysql,在 Windows 上安装 mysql-2.9.0 gem 失败

    我正在尝试在 Windows Server 2003 上安装 Redmine 2 1 4 为了让它工作 我需要安装activerecord mysql adaptergem 而这又似乎依赖于mysql 2 9 0 gem 我从下载了后者ru
  • 在 CherryPy 中使用映射

    In the 调度 其他调度员 CherryPy 文档部分 有一个 Django 风格的正则表达式到视图函数映射定义的示例 但没有说明如何将其附加到cherrypy tree 你应该如何注册这个映射 Edit 基于 正则表达式 URL 映射
  • 来自 C# 的 Azure BLOB 存储 REST 调用

    我正在尝试通过控制台应用程序与 Azure Blob 存储上的容器进行通信 我无法使用 SDK 因此 REST 是我唯一的选择 语言是 C 带有 NET 4 5 2 我已经尝试过这两个代码并且都返回相同的错误 Azure Rest API
  • Java 命名参数的名称(对于 Oracle JDBC 函数结果)

    我将调用一个函数 并按名称设置一些参数 例如 Connection c null ResultSet rs null String query PreparedStatement ps CallableStatement cs null t
  • 使用 Boto3 在 S3 中设置 AWS 内容类型

    我正在尝试使用 Amazon 将网页上传到 S3 存储桶Boto3 SDK对于Python 我在设置时遇到问题Content Type AWS 不断创建新的元数据密钥Content Type除了我使用此代码指定的之外 Upload a ne
  • 同一张表的双重 JOIN 两次

    我在查询时遇到了一个小问题 我需要对同一个表进行两次双重联接 我有这两张表 list couples id p 1 p 2 1 Topolino Minnie 2 Pippo Pluto 3 Paperino Paperone rank y