You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助: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_0
  • SUBSTRING_INDEX(t2.key, '_value', 1)从contact_0_value中得到contact_0
  • 两者相等时,说明是同一组联系方式的type和value

执行以上任意查询,都会得到你期望的键值对结果:

typevalue
phone1234567890
emailx@example.com

内容的提问来源于stack exchange,提问作者BlackLotus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 05:13:21