求助:MySQL中按键值对形式检索关联多键数据失败
解决方案
你的SQL查询逻辑错误出在JOIN的关联条件上,当前条件把type和value的对应关系搞反了。以下是两种修正后的写法:
方法1:基于type记录生成对应的value键
SELECT t1.value AS type, t2.value AS value FROM settings AS t1 JOIN settings AS t2 ON t2.key = CONCAT(SUBSTRING_INDEX(t1.key, '_', 2), '_value') WHERE t1.key LIKE 'contact_%_type'
逻辑说明:
- 从
t1(type记录)的key中提取前缀(比如contact_0_type提取出contact_0) - 拼接成对应的
value键(contact_0_value),以此关联t2中的对应记录
方法2:匹配共同前缀(更鲁棒)
如果后续key的格式可能变化(比如前缀长度改变),可以通过提取_type和_value前的共同部分来关联:
SELECT t1.value AS type, t2.value AS value FROM settings AS t1 JOIN settings AS t2 ON SUBSTRING_INDEX(t1.key, '_type', 1) = SUBSTRING_INDEX(t2.key, '_value', 1) WHERE t1.key LIKE 'contact_%_type' AND t2.key LIKE 'contact_%_value'
逻辑说明:
SUBSTRING_INDEX(t1.key, '_type', 1)从contact_0_type中得到contact_0SUBSTRING_INDEX(t2.key, '_value', 1)从contact_0_value中得到contact_0- 两者相等时,说明是同一组联系方式的type和value
执行以上任意查询,都会得到你期望的键值对结果:
| type | value |
|---|---|
| phone | 1234567890 |
| x@example.com |
内容的提问来源于stack exchange,提问作者BlackLotus
相关产品推荐
相关产品推荐

