mysql基于多连接选择新列

0qx6xfy6  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(239)

我仍在处理mysql的一些问题,所以任何帮助都将不胜感激。
我有三张table--设备,状态,区域。

equipment:
+---------------+------+------------+
| current_state |  id  | ...columns | 
+---------------+------+------------+

states:
+----------+-------------+
| state    | zone_id     |
+----------+-------------+

zones:
+-----+------+
| id  | zone | 
+-----+------+

在设备中,每行有一个当前\u状态。
在美国,每行有一个区域标识。
在分区中,每行有一个分区。
我希望将这三个表作为子查询select语句连接起来(甚至不确定这是否是一个语句),并将输出作为我选择的其他列中的1个别名列返回

+--------------+-------------+
| current_zone | ....columns |
+--------------+-------------+

预期输出示例如下:

+------------+-------------+--------+------------------+--------------+---------+
|    c_id    |    g_id     |  e_id  | equipment_type   | impressionId | email   |
+------------+-------------+--------+------------------+--------------+---------+
| 1234       | ABC1234     | 0001   | VEST             | 2032         |ab@yc.com|
| 1234       | 1234ABC     | 0001   | SHIRT            | 4372         |ab@yc.com|
| 1234       | DCBA123     | 0001   | CAN              | 4372         |ab@yc.com|
| 1234       | DCBA321     | 0001   | JACKET           | ab@yc.com    |ab@yw.com| 
| 4567       | abc321d     | 0002   | SHIRT            | 2032         |db@yw.com|
| 4567       | cba123d     | 0002   | CAN              | 4372         |db@yw.com|
| 4567       | def4rg4     | 0002   | JEANS            | 3210         |db@yw.com|
+------------+-------------+--------+------------------+--------------+---------+

当前查询有多个联接已引用zones and states表以确定不同的值:

SELECT equipment.*,
    ...
    FROM equipment
    LEFT JOIN c on equipment.c_id = c.id
    LEFT JOIN g on equipment.g_id = g.id
    LEFT JOIN states on g.state = states.state
    LEFT JOIN zones on zones.id = states.zone_id

实际上,我要做的是创建一个子查询,以便根据三个联接的结果创建一个新列,如下所示:

SELECT equipment.*,
    (SELECT
        equipment.current_state
        FROM equipment
        LEFT JOIN equipment.current_state = states.state
        LEFT JOIN zones.id = states.zone_id
    ) as current_zone,
    ...

这有可能吗?我是否试图在错误的位置选择新列?

rdlzhqv9

rdlzhqv91#

多亏了@theimpaler,我才能够清除我的标量子查询。在我看来,我认为我必须根据我想要的属性创建另一个连接,而实际上我所要做的只是创建一个条件标量子查询:

SELECT equipment.*,
(SELECT zones.zone
    FROM zones
    WHERE equipment.current_state = states.state
    AND zones.id = states.zone_id
) as current_zone,
...

相关问题