如果未找到任何内容,则返回默认行

时间:2015-02-12 16:20:02

标签: mysql default

我有一个返回数据的查询,假设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个查询来完成此操作,但有没有办法在没有额外查询的情况下执行此操作?

3 个答案:

答案 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