我有两张桌子:手机和 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
答案 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返回列表中的第一个非空值,所以如果有一个点击你得到它,如果没有点击你得到随机值。