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
相关产品推荐
相关产品推荐

