gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:49:44 25 4
gpt4 key购买 nike

我有两个表:phonesession_phone。这两个表都有名为 phone_number 的列。

现在我想检查表 session_phone 中是否存在电话号码,如果不存在则从表 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 中,它也会给我 phone 表中的其他号码。

请指教,谢谢。

示例数据:

在表 phone 中,电话号码是:1111,2222,3333,4444
在表 session_phone 中,电话号码是:2222

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

最佳答案

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

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

这是通过从 phone 中获取 1 个随机行并将其左连接到 session_phone 中可能的命中来实现的,如果没有命中,它将为 null。 Coalesce 返回列表中的第一个非空值,因此如果有命中,您将获得它,如果没有命中,您将获得随机值。

关于mysql - 如果不在另一个表中,则从一个表中选择,否则从另一个表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28515532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com