如何编写包含多个左连接的MySQL查询

如何编写包含多个左连接的MySQL查询,mysql,performance,join,Mysql,Performance,Join,我有一个由多个连接组成的查询,我想知道是否可以重新编写它以提高性能 我有两个表,如下所示(我删除了本例中不重要的列): 槽 (总共有25个插槽,每个插槽位于其自己的列中) 插槽_详细信息 ----------------------------------- | id | stat_1 | stat_2 | stat_3 | ----------------------------------- | 1 | 1 | 5 | 6 | | 2 | 4

我有一个由多个连接组成的查询,我想知道是否可以重新编写它以提高性能

我有两个表,如下所示(我删除了本例中不重要的列):

(总共有25个插槽,每个插槽位于其自己的列中)

插槽_详细信息

-----------------------------------
| id   | stat_1 | stat_2 | stat_3 |
-----------------------------------
| 1    | 1      | 5      | 6      |
| 2    | 4      | 31     | 23     |
| 3    | 6      | 5      | 7      |
| 4    | 7      | 4      | 9      |
| 5    | 2      | 3      | 5      |
-----------------------------------
(共有10项统计数据)

查询如下:

SELECT
    slots.name,
    slot_1_details.stat_1 AS slot_1_stat_1,
    slot_1_details.stat_2 AS slot_1_stat_2,
    slot_1_details.stat_3 AS slot_1_stat_3,
    slot_2_details.stat_1 AS slot_2_stat_1,
    slot_2_details.stat_2 AS slot_2_stat_2,
    slot_2_details.stat_3 AS slot_2_stat_3,
    slot_3_details.stat_1 AS slot_3_stat_1,
    slot_3_details.stat_2 AS slot_3_stat_2,
    slot_3_details.stat_3 AS slot_3_stat_3
FROM
    slots
LEFT JOIN
    slot_details AS slot_1_details
ON (
    slot_1_details.id = slots.slot_1
)
LEFT JOIN
    slot_details AS slot_2_details
ON (
    slot_2_details.id = slots.slot_2
)
LEFT JOIN
    slot_details AS slot_3_details
ON (
    slot_3_details.id = slots.slot_3
)
WHERE (
    slots.id = 1
)
| name | slot_1_stat_1 | slot_1_stat_2 | slot_1_stat_3 | slot_2_stat_1 | slot_2_stat_2 | slot_2_stat_3 | slot_3_stat_1 | slot_3_stat_2 | slot_3_stat_3 |
|bob   | 1             | 5             | 6             | 4             | 31            | 23            | 6             | 5             | 7             |
此查询的预期结果如下:

SELECT
    slots.name,
    slot_1_details.stat_1 AS slot_1_stat_1,
    slot_1_details.stat_2 AS slot_1_stat_2,
    slot_1_details.stat_3 AS slot_1_stat_3,
    slot_2_details.stat_1 AS slot_2_stat_1,
    slot_2_details.stat_2 AS slot_2_stat_2,
    slot_2_details.stat_3 AS slot_2_stat_3,
    slot_3_details.stat_1 AS slot_3_stat_1,
    slot_3_details.stat_2 AS slot_3_stat_2,
    slot_3_details.stat_3 AS slot_3_stat_3
FROM
    slots
LEFT JOIN
    slot_details AS slot_1_details
ON (
    slot_1_details.id = slots.slot_1
)
LEFT JOIN
    slot_details AS slot_2_details
ON (
    slot_2_details.id = slots.slot_2
)
LEFT JOIN
    slot_details AS slot_3_details
ON (
    slot_3_details.id = slots.slot_3
)
WHERE (
    slots.id = 1
)
| name | slot_1_stat_1 | slot_1_stat_2 | slot_1_stat_3 | slot_2_stat_1 | slot_2_stat_2 | slot_2_stat_3 | slot_3_stat_1 | slot_3_stat_2 | slot_3_stat_3 |
|bob   | 1             | 5             | 6             | 4             | 31            | 23            | 6             | 5             | 7             |
不幸的是,我无法改变表格

谢谢你的帮助

也许吧

SELECT * FROM slots s LEFT JOIN slot_details sd ON s.id=sd.id
但我不确定,因为你发布的查询非常混乱


这些表的键是什么?

我为你感到难过,这些表的设计太糟糕了。这两种情况下的键都是ID。我试图查询slots表以从给定id返回一行。它还需要返回每个slot的3个统计信息。将slot_details.id连接到slot.slot_1、slot.slot_2、slot.slot_3,我将为问题添加一个示例。