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

MySQL多列条件查询:筛选特定alias_word且original与指定语言行不同

解决SQL筛选不同original值的问题

先理清楚咱们的需求:要从words表中找出alias_word为word1,并且original字段值和同alias_word下language='es'那条记录的original值不一样的所有行。

你之前的查询返回空,大概率是因为没有正确获取到language='es'对应的original值来做对比。这里给你两种可行的解决方案:

方法一:使用子查询获取参考值

这种方式先通过子查询拿到alias_word='word1'且language='es'的记录的original值,再在外层筛选不符合该值的记录:

SELECT *
FROM words
WHERE alias_word = 'word1'
  AND original != (
    SELECT original
    FROM words
    WHERE alias_word = 'word1' AND language = 'es'
  );

这个查询会先执行括号里的子查询,得到changed_word这个值,然后外层筛选alias_word='word1'且original不等于changed_word的记录,正好匹配你要的id=2的那条数据。

方法二:使用自连接

通过将表和自身连接,直接关联出参考行和目标行做对比:

SELECT w.*
FROM words w
JOIN words es_ref ON w.alias_word = es_ref.alias_word
WHERE w.alias_word = 'word1'
  AND es_ref.language = 'es'
  AND w.original != es_ref.original;

这里es_ref作为参考表的别名,专门指向language='es'的那条记录,然后通过JOIN关联同alias_word的记录,最后筛选出original值不同的行。

这两种方法都能正确返回你预期的结果:

2 word1 en orig_word

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:08:07