MySQL 5.5.9子查询问题:如何通过已知entry获取关联数据
解决同表关联查询问题
我来帮你搞定这个同表关联查询的需求~你想要通过已知的entry值,直接获取它的difficulty_entry_1指向的那条记录的完整信息,原来的SQL语句存在几个小问题:比如SELECT子句里的子查询不能返回多个字段,语法上也有多余的分号。
最适合这种同表关联场景的方法是自连接(SELF JOIN),下面是修正后的SQL语句:
-- 先设置目标entry变量,也可以直接在WHERE里写死数值 SET @bossID = 26687; SELECT ct2.* FROM creature_template ct1 INNER JOIN creature_template ct2 ON ct1.difficulty_entry_1 = ct2.entry WHERE ct1.entry = @bossID;
语句解释:
- 给表起两个别名
ct1和ct2,分别代表「原始记录」和「关联的难度记录」 - 通过
ct1.difficulty_entry_1 = ct2.entry建立关联,找到原始记录指向的那条数据 - 最后查询
ct2.*就能得到关联记录的所有字段,完全符合你想要的结果
针对你的示例:
如果原表中有:
| entry | difficulty_entry_1 |
|---|---|
| 26687 | 12345 |
| 12345 | 0 |
执行上面的SQL后,会直接返回entry=12345的完整记录:
| entry | difficulty_entry_1 | ...(其他字段) |
|---|---|---|
| 12345 | 0 | ... |
额外提示:
如果要兼容difficulty_entry_1为0或者不存在对应记录的情况,可以把INNER JOIN改成LEFT JOIN,这样即使没有关联记录,也会返回ct1的信息(ct2的字段会显示为NULL),根据你的实际需求选择即可。
内容的提问来源于stack exchange,提问作者Nightpanda99
相关产品推荐
相关产品推荐

