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