我有一个返回数据的查询,假设members.language_id
大于零且支持的语言。如果一个成员没有选择的语言members.language_id
默认为零,这在加入另一个表时没有帮助(请记住我没有设计这个表结构而且我无法更改它)。 / p>
所以,我想做的是当没有结果返回默认结果时:
t.code = 'Kount_Declined' and t.language_id = 1
select m.email, t.subject, t.message from orders o
join members m using(member_id)
join languages l using(language_id)
join emailtempl t on t.language_id = GREATEST(l.language_id, 1)
where o.transaction_id = '3TK904KVMM8X'
and t.code = 'Kount_Declined'
有什么方法可以做到这一点吗?我知道我可以使用2个查询来完成此操作,但有没有办法在没有额外查询的情况下执行此操作?
答案 0 :(得分:1)
尝试修改的连接条件
select m.email, t.subject, t.message
from orders o
join members m using(member_id)
join emailtempl t on t.language_id = GREATEST(o.language_id, 1)
where o.transaction_id = '3TK904KVMM8X'
and t.code = 'Kount_Declined'
;
答案 1 :(得分:1)
您可以使用IF
select m.email, t.subject, t.message
from orders o
join members m using(member_id)
join emailtempl t on o.language_id = IF(t.language_id = 0, 1, t.language_id)
where o.transaction_id = '3TK904KVMM8X'
and t.code = 'Kount_Declined';
答案 2 :(得分:1)
感谢@RyanVincent建议我使用带有union
的{{1}},然后我就可以提出这个问题了,它已经通过了我正在寻找的所有测试为了完成这一壮举。
limit 1