mysql - 如果不在另一个表中,则从一个表中选择,否则从另一个表中选择

时间:2015-02-14 12:15:21

标签: mysql

我有两张桌子:手机 session_phone 。这两个表都有名为phone_number的列。

现在我想检查表 session_phone 中是否存在电话号码,如果没有,则从表电话中选择一个随机电话号码。但如果电话号码存在,则应从表session_phone中选择电话号码。

以下是我的查询似乎无法正常工作。

    select case when b.phone_number is null then a.phone_number else b.phone_number end 'phone_number'
from phone a left join session_phone b on 
a.phone_number = b.phone_number and a.user_group = b.user_group 
order by rand() limit 1

上述问题的问题在于,即使 session_phone 中存在电话号码,它也会从表电话中为我提供其他号码。

请建议。谢谢。

示例数据:

在表格手机中,电话号码为:1111,2222,3333,4444
在表格 session_phone 中,电话号码为:2222

输出应该是(因为我按 rand()订购并限制1):2222

1 个答案:

答案 0 :(得分:0)

完成这项工作的最简单的查询可能是:

select coalesce(s.phone_number, p.phone_number)
from (select * from phone order by rand() limit 1) p
left join session_phone s on s.phone_number = ?

请参阅SQLFiddle

这可以通过从手机中获取1个随机行并将其连接到session_phone中的可能命中来实现,如果没有命中,它将为null。 Coalesce返回列表中的第一个非空值,所以如果有一个点击你得到它,如果没有点击你得到随机值。