从许多不同的表中选择并加入JOIN

问题描述 投票:0回答:1

我需要合并来自不同表的一些不同列。这些在这里列出。我只是似乎无法正确理解语法。我是一个初学者,请耐心等待我!

这些表是“报告”,“任务”和“ 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
mysql
1个回答
0
投票

类似这样的东西:

 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

在SELECT关键字之后,列出所有要返回的表达式。

FROM子句引用表。多个表应由JOIN关键字分隔,然后由ON子句分隔。 (不需要INNER关键字;不需要CROSS关键字,但是在没有连接条件的情况下可以包含CROSS关键字,以帮助将来的读者;外部连接需要添加LEFT(或RIGHT关键字)。

考虑为每个表引用分配别名。

限定[[all列引用]具有分配的表别名(如果未分配别名,则为表名。)

[当SELECT列表中的列省略了AS column_name时,将使用列名。例如,我们可以省略AS accepted,并且第四列仍将接受该名称。

避免返回具有理智名称的多列。这样做不是违法的,但是请考虑将列别名(结果集中的列名)修改为唯一的。即depl_unit_id列之一可以重命名。

© www.soinside.com 2019 - 2024. All rights reserved.