mysql - 从许多不同的表中选择并加入
问题描述
我需要组合来自不同表的几个不同的列。这些都列在这里。我似乎无法正确使用语法。我是初学者,请耐心等待!
这些表是“report”、“mission”和“hist_unit”,以下值相同
mission.id = report.mission_id
hist_unit.id = report.deployed_unit_id
沿着这些路线尝试了一些东西
SELECT
mission_id AS mission_id,
deployed_unit_id AS depl_unit_id,
accepted AS accepted,
character_id AS character_id,
pilot_status AS pilot_status
FROM report
id AS depl_unit_id
faction AS faction
FROM hist_unit
mission.id AS mission_id
hist_date AS hist_date
FROM mission
我希望这个查询做的是将上面显示的列放在一起,并检查顶部显示的值是否相互对应。然后我希望它只显示派系 = 3 和接受 = 1 的行。然后我希望它只显示条目
WHERE hist_date BETWEEN '1941-11-15 00:00:00.000' AND '1942-04-15 23:59:59:999'
输出应该是这样的
mission_id,depl_unit_id,faction,character_id,pilot_status,accepted,hist_date
解决方案
像这样的东西:
SELECT r.id AS report_id
, r.mission_id AS mission_id
, r.deployed_unit_id AS depl_unit_id
, r.accepted AS accepted
, r.character_id AS character_id
, r.pilot_status AS pilot_status
, h.id AS h_depl_unit_id
, h.faction AS faction
, m.id AS m_mission_id
FROM report r
JOIN hist_unit h
ON h.id = r.deployed_unit_id
JOIN mission m
ON m.id = r.mission_id
WHERE h.hist_date >= '1941-11-15'
AND h.hist_date < '1942-04-15' + INTERVAL 1 DAY
AND h.faction = 3
AND r.accepted = 1
ORDER
BY r.id
, r.mission_id
在 SELECT 关键字之后,列出要返回的所有表达式。
该FROM
子句引用表。多个表应该由 JOIN 关键字分隔,然后是一个ON
子句。(INNER 关键字不是必需的;CROSS 关键字不是必需的,但可以在没有连接条件时包含,以帮助以后的读者;外部连接需要添加LEFT
(或RIGHT
关键字)。
考虑为每个表引用分配一个别名。
使用分配的表别名(或表名称,如果未分配别名)限定所有列引用。
当AS column_name
SELECT 列表中的列省略时,将使用列名。例如,我们可以省略AS accepted
并且第四列仍然会接受名称。
避免返回具有健全名称的多个列。这样做并不违法,但请考虑将列别名(结果集中的列名)修改为唯一。即depl_unit_id
可以重命名其中一列。
在比较范围内的日期时间值时,强烈考虑使用>=
和<
比较。不要试图以小于或等于23:59:59.999
......如果精度是微秒,我们会留下一个小差距。让我们避免差距,只做一个“小于”第二天的午夜,我们要排除的第一个日期时间值。(是的,我们必须指定列名/表达式两次,每次比较一次,因为没有BETWEEN_GE_LT
比较运算符可以用“小于”比较代替运算符的“小于或等于”比较BETWEEN
。这是一个小为更明确准确地表达我们试图实现的目标而付出的代价。
推荐阅读
- android - React Native 中 Padding 和 Margin 的区别
- c# - 如何在 Unity3D 的 ac##error 预处理器中打印 URL?
- python - 使用 Python-Docx 从特定 Docx 文件中提取内容
- node.js - 无法使用 Eclipse 中的进程生成器运行 lighthouse cli 错误“windows 找不到灯塔”
- javascript - WebRTC ICE 候选人(无法读取属性)
- git - 作为 npm 依赖的私有 Typescript 库
- android - 使用 JSON(改造)在饼图上添加数据
- angular - Angular:具有加载状态的按钮
- spring - 要查找的批量数据是否存在:Spring Data JPA
- windows - 每月 3000 万行 CSV,需要根据单独文件的查找在每行添加字段