我无法让这个 mysql join 查询产生所需的结果

2023-12-05

三个表的结构。

Booking

CREATE TABLE `booking` (
`bookingID` int(11) NOT NULL AUTO_INCREMENT,
`receipt_no` int(11) NOT NULL,
`client` varchar(32) NOT NULL,
`operator` varchar(32) NOT NULL,
`discount` int(11) NOT NULL,
`total_amount` int(64) NOT NULL,
`amount_paid` int(32) NOT NULL,
`balance` int(32) NOT NULL,
`date` date NOT NULL,
PRIMARY KEY (`bookingID`)
ENGINE=InnoDB AUTO_INCREMENT=209 DEFAULT CHARSET=latin1

Jobtitle

CREATE TABLE `jobtitle` (
`jobtitleID` int(11) NOT NULL AUTO_INCREMENT,
`jobtitle` varchar(255) NOT NULL,
`quantity` int(11) NOT NULL,
`amount` varchar(255) NOT NULL,
`jobtypeID` int(11) NOT NULL,
`bookingID` int(11) NOT NULL,
PRIMARY KEY (`jobtitleID`)
ENGINE=InnoDB AUTO_INCREMENT=463 DEFAULT CHARSET=latin1

First_graphics_债务人

CREATE TABLE `first_graphics_debtors`
`id` int(11) NOT NULL AUTO_INCREMENT,
`receipt_no` int(11) NOT NULL,
`date_paid` date NOT NULL,
`old_balance` int(32) NOT NULL,
`debtor_amount_paid` int(32) NOT NULL,
`new_balance` int(32) NOT NULL,
PRIMARY KEY (`id`)
ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1

插入少量数据后

Booking

+-----------+------------+----------+----------+----------+--------------+-------------+---------+------------+
| bookingID | receipt_no | client   | operator | discount | total_amount | amount_paid | balance | date       |
+-----------+------------+----------+----------+----------+--------------+-------------+---------+------------+
|       205 |  156872940 | Osaro    | Obi      |       10 |       156380 |      135000 |    5742 | 2012-05-15 |
|       206 |  227349168 | Amaka    | Stephen  |        4 |        73250 |       70320 |       0 | 2012-05-15 |
|       207 |  155732278 | Aghahowa | Ibori    |        0 |       116836 |       15000 |  101836 | 2012-05-15 |
|       208 |  753263343 | Chaka    | Stephen  |       10 |       231290 |       56000 |  152161 | 2012-05-15 |
+-----------+------------+----------+----------+----------+--------------+-------------+---------+------------+

Jobtitle

+------------+---------------------------+----------+--------+-----------+-----------+
| jobtitleID | jobtitle                  | quantity | amount | jobtypeID | bookingID |
+------------+---------------------------+----------+--------+-----------+-----------+
|        454 | A1 Full Colour            |       10 | 4334   |         1 |       205 |
|        455 | Complementry Card         |       20 | 5652   |         2 |       205 |
|        456 | A4 Printout (graphics)B/W |       25 | 2930   |         4 |       206 |
|        457 | Scan                      |        2 | 4334   |         5 |       207 |
|        458 | A4 Full Colour            |      199 | 500    |         3 |       207 |
|        459 | ID Card                   |        2 | 4334   |         2 |       207 |
|        460 | A3 Full Colour            |       10 | 4334   |         3 |       208 |
|        461 | Flex Banner               |       20 | 2930   |         2 |       208 |
|        462 | A2 Single Colour          |      199 | 650    |         1 |       208 |
+------------+---------------------------+----------+--------+-----------+-----------+

First_graphics_债务人

+----+------------+------------+-------------+--------------------+-------------+
| id | receipt_no | date_paid  | old_balance | debtor_amount_paid | new_balance |
+----+------------+------------+-------------+--------------------+-------------+
|  7 |  156872940 | 2012-05-15 |        5742 |               5000 |         742 |
|  8 |  156872940 | 2012-05-15 |        5742 |               5742 |           0 |
|  9 |  753263343 | 2012-05-15 |      152161 |             152161 |           0 |
| 13 |  753263343 | 2012-05-15 |      152161 |              14524 |      137637 |
| 14 |  753263343 | 2012-05-15 |      152161 |               2000 |      150161 |
| 15 |  753263343 | 2012-05-15 |      152161 |               1000 |      151161 |
+----+------------+------------+-------------+--------------------+-------------+

当我运行此查询时:

SELECT `booking`.`receipt_no`, `client`, `operator`, `discount`, `total_amount`,
       `amount_paid`, `balance`, `date`, `jobtitle`, `quantity`, `amount`,
       `date_paid`, `old_balance`, `debtor_amount_paid`, `new_balance`
  FROM (`booking`)
  JOIN `jobtitle` ON `jobtitle`.`bookingID` = `booking`.`bookingID`
  JOIN `first_graphics_debtors`
    ON `first_graphics_debtors`.`receipt_no` = `booking`.`receipt_no`
 WHERE `booking`.`receipt_no` =  '753263343'
   AND `first_graphics_debtors`.`receipt_no` =  '753263343'
 GROUP BY `jobtitle`.`quantity`

我得到这个输出:

+------------+--------+----------+----------+--------------+-------------+---------+------------+------------------+----------+--------+------------+-------------+--------------------+-------------+
| receipt_no | client | operator | discount | total_amount | amount_paid | balance | date       | jobtitle         | quantity | amount | date_paid  | old_balance | debtor_amount_paid | new_balance |
+------------+--------+----------+----------+--------------+-------------+---------+------------+------------------+----------+--------+------------+-------------+--------------------+-------------+
|  753263343 | Chaka  | Stephen  |       10 |       231290 |       56000 |  152161 | 2012-05-15 | A3 Full Colour   |       10 | 4334   | 2012-05-15 |      152161 |             152161 |           0 |
|  753263343 | Chaka  | Stephen  |       10 |       231290 |       56000 |  152161 | 2012-05-15 | Flex Banner      |       20 | 2930   | 2012-05-15 |      152161 |             152161 |           0 |
|  753263343 | Chaka  | Stephen  |       10 |       231290 |       56000 |  152161 | 2012-05-15 | A2 Single Colour |      199 | 650    | 2012-05-15 |      152161 |             152161 |           0 |
+------------+--------+----------+----------+--------------+-------------+---------+------------+------------------+----------+--------+------------+-------------+--------------------+-------------+

下面各列的数据重复三次,而不是从与receipt_no相关的四行获取数据

date_paid, old_balance, debtor_amount_paid, new_balance

预期结果

+------------+--------+----------+----------+--------------+-------------+---------+------------+------------------+----------+--------+------------+-------------+--------------------+-------------+
| receipt_no | client | operator | discount | total_amount | amount_paid | balance | date       | jobtitle         | quantity | amount | date_paid  | old_balance | debtor_amount_paid | new_balance |
+------------+--------+----------+----------+--------------+-------------+---------+------------+------------------+----------+--------+------------+-------------+--------------------+-------------+
|  753263343 | Chaka  | Stephen  |       10 |       231290 |       56000 |  152161 | 2012-05-15 | A3 Full Colour   |       10 | 4334   | 2012-05-15 |      152161 |             152161 |           0 |
|  753263343 | Chaka  | Stephen  |       10 |       231290 |       56000 |  152161 | 2012-05-15 | Flex Banner      |       20 | 2930   | 2012-05-15 |      152161 |             14524  |     137637  |
|  753263343 | Chaka  | Stephen  |       10 |       231290 |       56000 |  152161 | 2012-05-15 | A2 Single Colour |      199 | 650    | 2012-05-15 |      152161 |             2000   |      150161 |
+------------+--------+----------+----------+--------------+-------------+---------+------------+------------------+----------+--------+------------+-------------+--------------------+-------------+

虽然,预期的输出不完整,但也许你可以从数据中得到图片debtor_amount_paid and new_balance


我相当确定你的问题是因为你GROUP BY条款。不确定你使用它的目的是什么,但尝试不使用它。如果出现重复行,请尝试使用SELECT DISTINCT。如果您的目标是根据该列对结果进行排序,则使用ORDER BY.

另外,指定receipt_no两次在WHERE条款是多余的。这两个表已经由该列连接起来,因此您只需在一个表中过滤它即可。除了一些特殊的例外情况外,反引号并不是真正必要的,例如列名中的空格或逗号,或者与保留字命名相同的列(也可能是其他一些)。您唯一看起来需要反引号的列是date列,但即使将它们排除在该列中,您应该仍然没问题。我只是发现到处的反引号使查询变得更长并且更难以阅读。他们在那里不会伤害任何东西,所以如果你愿意的话,你可以离开他们,但就我个人而言,我不是粉丝。

我用上面提到的修改重写了您的查询,另外我还提供了表别名以进一步缩短它。这不会提高性能或任何东西,只是让阅读 IMO 变得更容易:

SELECT DISTINCT
    b.receipt_no, client, operator, discount, total_amount,
    amount_paid, balance, `date`, jobtitle, quantity,
    amount, date_paid, old_balance, debtor_amount_paid, new_balance
FROM
    booking b
    INNER JOIN jobtitle jt ON jt.bookingID = b.bookingID
    INNER JOIN first_graphics_debtors fgd ON fgd.receipt_no = b.receipt_no
WHERE
    b.receipt_no = '753263343'
ORDER BY
    jt.quantity
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我无法让这个 mysql join 查询产生所需的结果 的相关文章

  • MySQL:在一条语句上连接多个表

    我有以下数据库结构 层次结构 TABLE 产品类别 id name TABLE product id parent id name 父 ID 是产品类型 ID TABLE treeNode id parent id name type 它是
  • 如何在 MariaDB 或 MySQL 中创建文本类型的外键?

    我有两张桌子 CREATE TABLE first table my id TEXT 6 NOT NULL content VARCHAR 30 NOT NULL PRIMARY KEY my id 6 Engine InnoDB char
  • 我的 PHP 脚本如何判断服务器是否繁忙?

    我想运行一个 cron 作业来进行清理 需要大量的 CPU 和 Mysql 资源 我希望它仅在服务器不相对繁忙时运行 从 PHP 中确定这一点的最简单方法是什么 例如 是否有一个查询返回最后一分钟完成了多少个查询 if function e
  • 从多个表插入表

    嘿 我有一个连接表 连接两个不相关的表 两个表都有ID的 我需要选择ID从每个表中使用WHERE具有不同的值 例如这就是我的看法 INSERT INTO c aID bID VALUES SELECT a ID WHERE a Name M
  • 如何使用 mysqli 设置排序规则?

    我的数据库使用 utf8 czech ci 排序规则 我也想将其设置为我的数据库连接 如果我不想要默认的 utf8 general ci Mysqli set charset 不会让我设置排序规则 Here https bugs php n
  • Sql查询增加多个项目的项目价值价格

    我想编写 Sql 查询来按百分比增加商品价格 场景是 在表中 我有 3 列 ID 商品名称 价格 Example If item Name is T shirt Increase price by 10 item Name is Jins
  • 如何在对应用程序影响最小的情况下从 MySQL“切换”到 Amazon RDS?

    Amazon 官方表示 Amazon RDS 让您能够访问熟悉的 MySQL 数据库的全部功能 这意味着您现在已经在现有 MySQL 数据库中使用的代码 应用程序和工具可以与 Amazon RDS 无缝协作 我不明白这一点 Amazon R
  • 如何在会话过期后自动更新数据库而不刷新我的页面

    您需要刷新或单击该代码 然后它才会转到索引页面 并且在会话过期后更新数据库之前 如何让会话过期后自动更新数据库 使用户活跃度为0 而无需刷新或点击页面 idletime 3600 after 1hr the user gets logged
  • 数据库记录的多级菜单

    我需要一些有关 PHP 的帮助 我有一个工作正常的多级 css 菜单 但现在我想根据数据库中的记录生成 菜单代码 div ul class dropdown li a href Link 1 a li li a href Link 2 a
  • SQL LIKE 实际上是如何工作的

    例如 当我有这样的字符串时 ABBBCSLAK JDK ASAAAAFJKDSKJFSDF 当我像这样使用 SQL 时 SELECT FROM table WHERE column LIKE JDK 当服务器访问 JDK 时到底会发生什么
  • 通过sql视图向多个表插入数据

    mysql 有没有办法通过视图向多个表插入数据 MySQL 参考手册对于可更新视图是这样说的 一些视图是可更新的 也就是说 您可以在诸如以下的语句中使用它们UPDATE DELETE or INSERT更新基础表的内容 为了使视图可更新 必
  • Perl 和 MySql 中的 utf8 编码

    我的数据库 MySql 有 utf8 general 排序规则 我正在从数据库访问数据并显示一个网页 用 Perl 开发 它显示瑞典语字符 和不同的字符 我检查了Mysql数据库 在那里我可以看到其中包含 字符的数据 看来 访问数据时存在编
  • MySQL 外键,无法创建表(错误号:150)

    我正在尝试为我的系统构建数据库和表 但我发现如果我不在代码中添加外键 没有错误 我使用了很多方法尝试使代码正常工作 但仍然有错误 我使用的是MySQL 5 5 31 代码如下 创建数据库服务条款 DROP TABLE TOS USER CA
  • MySQL + htaccess mod_rewrite?

    我正在将类似代理的短域与我的网站结合使用 短域名是 hrci me 长域名是reachchallenges infectionist com hrci me 使用 mod rewrite 并有一个规则 几乎可以从 hrci me 到reac
  • 从 MySql 迁移到 Sql Server 2008

    我有大约 200 GB 的 Mysql 转储文件 现在我需要迁移到 Sql server 2008 那么我应该遵循什么方法 我应该继续逐行 sql 语句还是有任何适合我的要求的 GUI 工具 微软 SQL Server 迁移 Assista
  • mysql-connector-java 升级到 8.0.11 更改了从数据库检索的所有日期值

    对于 Spring 项目 mysql connector java已迁移自6 0 6 to 8 0 11 因此与8 0 11问题如下 Caused by com mysql cj exceptions InvalidConnectionAt
  • 在准备好的语句中使用“like”通配符

    我正在使用准备好的语句来执行 mysql 数据库查询 我想实现基于某种关键字的搜索功能 为此我需要使用LIKE关键字 我知道的就这么多 我以前也使用过准备好的语句 但我不知道如何使用它LIKE因为从下面的代码中我将在哪里添加 keyword
  • 如何使用 DbSession 在 Yii2 中创建用户会话管理系统 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 今天 当我想为我的网站创建用户个人资料页面并希望创建系统用户可以管理他在此系统中的活动会话时 需要 查看活动会话 浏览器和平台 查看当
  • MySQL“错误 1005 (HY000):无法创建表 'foo.#sql-12c_4' (errno: 150)”

    我正在努力在数据库中创建一些表foo 但每次我最终都会得到关于外键的 errno 150 首先 这是我创建表的代码 CREATE TABLE Clients client id CHAR 10 NOT NULL client name CH
  • 远程数据库的“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障”

    我尝试连接到远程 MySQL 数据库 但失败并收到此错误 com mysql jdbc exceptions jdbc4 CommunicationsException Communications link failure 困惑的是 当我

随机推荐

  • ios 8自定义键盘按住按钮可以删除吗?

    我目前正在构建一个自定义键盘 我快完成了 我遇到的一个问题是删除按钮 当用户点击删除按钮时 它会执行它应该执行的操作并删除先前的文本条目 然而 当用户按住按钮时 什么也没有发生 如何让用户按住删除按钮时 键盘像标准ios键盘一样连续删除 这
  • 为什么延迟求值可以将不纯函数转化为纯函数?

    我知道纯函数是不依赖于系统状态的函数 没有副作用 其输出仅取决于其输入 进行 http 调用被认为是副作用 因此 以下是不纯函数的示例 const httpCall url params gt getJson url params 但是 只
  • pyqtgraph:对齐不同图中x轴的刻度

    这是后续这个问题 问题是当其中一个图重新缩放时如何调整多个 pyqtgraph 的 x 轴缩放 我想要的结果是所有图表的刻度完美对齐 以便您可以直接比较两个图表的内容 给定的答案存档了该任务 即根据变化重新缩放图表 但是当图表的内容不同时
  • 乔达时间:最近一周和一个月

    获取给定日期的最近完整一周和最近完整月份的开始 结束日期的最佳方法是什么 即给定今天的日期 如何找出刚刚完成的一周 一个月也是如此 我得到了解决方案 LocalDate today new LocalDate LocalDate lastW
  • C++ Primer(第 5 版):“16.3 重载和模板”的所有“更专业”示例都是错误的吗?

    C Primer 第 5 版 第 16 3 节 重载和模板 教授在存在候选函数模板实例化的情况下的函数匹配过程 以下是本节中使用的函数模板的声明 using std string template
  • Facebook 开放图谱和元标签

    我有以下输出https developers facebook com tools debug 我添加了locale元标签 因为我有很多无关的财产错误 但这并不能解决问题 Extraneous Property Objects of thi
  • React Native 中的 CameraX 视图 - 无法配置相机

    我正在创建cameraX视图 以便通过桥接来反应本机 普通视图在RN中渲染 桥接流程很好 PreviewView用于显示 CameraX 预览的相机源 我已成功实现预览 但不确定为什么预览未在 UI 上呈现 它只是一个空白屏幕 让我知道 U
  • Django 使用相关实体字段序列化查询集

    我正在尝试加入 2 个实体 从中获取特定字段 然后返回该实体的 JSON 我尝试编写以下代码 import datetime result Foo objects all result result select related bar e
  • 有没有“单项大小的异步任务缓冲区”这样的同步工具?

    在 UI 开发中 我多次以这样的方式处理事件 当事件第一次出现时 我立即开始处理 但如果有一个处理操作正在进行中 我会等待它完成 然后再处理另一个事件 如果在操作完成之前发生多个事件 我只处理最近的一个 我通常的做法是 我的处理方法有一个循
  • 如何允许 Java 客户端 TLS10 连接?

    在尝试使用 Java 16 在 Eclipse 中执行 hello world MSSQL JDBC 连接时 出现以下错误 server selected protocol version TLS10 is not accepted by
  • 如何将mongodb文档中的所有数组元素更改为某个值? [复制]

    这个问题在这里已经有答案了 假设我有以下文档 id ObjectId 5234cc89687ea597eabee675 code xyz tags school book bag headphone appliance qty size S
  • 从aspx网页读取xml

    我们必须从 aspx 页面读取数据 当我们使用查询字符串调用页面时 它会返回一个 xml 文档 其中包含与查询字符串匹配的数据 我们有一个与我们返回的 xml 相匹配的 XSD 我想我们可以从http响应中读取xml文档 这行得通吗 我们怎
  • 从服务访问 UI 线程处理程序

    我正在 Android 上尝试一些新的东西 我需要访问 UI 线程的处理程序 我知道以下几点 UI线程有自己的处理程序 和活套 任何消息都会被放置 进入UI的消息队列 线 Looper 获取事件 并将其传递给处理程序 处理程序处理消息并 将
  • 确保 MATLAB 不会重新计算符号表达式

    我正在构建 我的第一个 MatLab 程序 它需要对方程进行符号微分 然后多次使用此解决方案 使用不同的数字输入 我不希望它每次需要输入一组新的数值时都重新计算符号微分 这可能会大大增加运行该程序所需的时间 鉴于其本质 数字优化器 这可能已
  • MPDF 电子邮件附件发送空白 PDF

    我已经使用 mpdf 成功生成了 PDF 我已通过下载 PDF 进行了验证 但是 当我将 PDF 作为电子邮件附件发送时 我收到 Adob e Reader 的空白 PDF 并显示 内存不足 错误 下面是我的代码
  • 为什么 dart 错误地推断出我的泛型参数类型?

    当我明确地将 mySet 变量等同于 int 集文字时 我似乎无法理解为什么 mySet 变量被推断为具有动态参数类型的通用集 那么这个结果合乎逻辑吗 还是 dart 确实未能推断出泛型集参数类型 main Set mySet 1 2 3
  • Xamarin + Android + 绑定 YouTube 视频播放器编译错误

    我希望将 YouTubeAndroidPlayerApi jar 绑定到我的 Xamarin Android 项目中 我已在 Jars 文件夹下添加了 YouTubeAndroidPlayerApi jar 但我的项目无法编译 错误 不要覆
  • 仅通过意图共享到 LinkedIn 的类名称

    我目前正在 Android 应用程序中为精选的流行平台创建直接意图以共享一些文本 我目前正在尝试获得与 LinkedIn 合作的直接意向 我目前有一个为 Twitter 工作的直接意图 如下所示 shareIntent new Intent
  • 在 Eclipse 中运行单个 JUnit 测试

    如果我有一个包含多个测试的测试套件 当我尝试从代码编辑器的上下文菜单或 JUnit 视图运行单个单元测试时 它似乎坚持始终运行整个套件 而不是单次测试 有没有办法禁用更改此行为 以便我可以要求运行该测试 并且仅运行该测试 在包资源管理器中展
  • 我无法让这个 mysql join 查询产生所需的结果

    三个表的结构 Booking CREATE TABLE booking bookingID int 11 NOT NULL AUTO INCREMENT receipt no int 11 NOT NULL client varchar 3