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

MySQL同列值比较与跨表查询问题:SQL结果不符合预期

修复你的MySQL查询问题

首先我先理清楚你的两张表结构和数据,确保理解正确:

  • ok1表:包含id, model, name字段,数据为(1, 'AAA', 'AAA')、(2, 'BBB', 'BBB')、(3, 'CCC', 'CCC')
  • ok2表:包含idok, nameok字段,数据为(1, 'ok1')、(2, 'ok2')、(3, 'ok3')

你的原SQL存在几个关键问题,导致无法得到预期结果:

  1. 错误使用了占位符表名yourTable,实际应该替换为你的真实表名ok1和ok2
  2. 重复使用t1别名造成冲突(最后一行的inner join yourTable t1),不同表/关联需要用不同别名区分
  3. 关联逻辑混乱,没有正确把ok2表和ok1的主表、自连接表关联起来
  4. 字段别名不符合你需要的结果集要求(比如用了nameok1/nameok2,而你需要nameok/okname)

根据你要的结果集字段(id, name, model, nameok, idmodel, namemodel, modelmodel, okname),我推测你想要的逻辑是:

  • 从ok1主表获取基础字段
  • 从ok1自连接的其他记录获取关联字段(要求主表和自连接表的name、model不重复)
  • 从ok2表分别关联主表、自连接表的id,得到对应的nameok和okname

下面是修复后的SQL语句:

SELECT 
    t1.id,
    t1.name,
    t1.model,
    ok2_main.nameok,
    t2.id AS idmodel,
    t2.name AS namemodel,
    t2.model AS modelmodel,
    ok2_rel.nameok AS okname
FROM ok1 t1
-- 自连接ok1,排除name和model相同的记录
INNER JOIN ok1 t2 
    ON t1.name <> t2.name AND t1.model <> t2.model
-- 关联ok2获取主表对应的nameok
INNER JOIN ok2 ok2_main 
    ON t1.id = ok2_main.idok
-- 关联ok2获取自连接表对应的okname
INNER JOIN ok2 ok2_rel 
    ON t2.id = ok2_rel.idok;

执行这条SQL后,你会得到符合字段要求的结果集,举部分示例:

idnamemodelnameokidmodelnamemodelmodelmodelokname
1AAAAAAok12BBBBBBok2
1AAAAAAok13CCCCCCok3
2BBBBBBok21AAAAAAok1

如果这个结果和你的预期有偏差,可以补充说明具体的数据逻辑,我再帮你调整~

内容的提问来源于stack exchange,提问作者Sri Karyani Damanik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:57:33