gpt4 book ai didi

php - 如何在 MySQL 中订购/限制内部连接?

转载 作者:可可西里 更新时间:2023-11-01 08:09:25 24 4
gpt4 key购买 nike

我不擅长SQL。我需要从我的数据库中获取某些信息。此信息是单个帐户下的用户 ID 及其用户名的列表。涉及3张表。

客户

  • 客户编号

CUSTOMER_RELATIONSHIP

  • 关系类型
  • child 编号
  • parent_id

USER_NAME

  • user_name -- 用户名的字符串值
  • customer_id -- 外键
  • start_stamp -- 时间戳
  • end_stamp -- 时间戳

我的 USER_NAME 数据库中有很多条目,因为可以更改用户名。 start_stamp 是 user_name 被激活的时间,end_stamp 是它结束的时间。通常,对于打开的用户,数据库中有一个条目,其中 end_stamp 为空(因为 user_name 当前处于事件状态)。但是,如果用户已关闭,则 USER_NAME.end_stamp 可能不会为空,因为该用户名最近已退休。最初我正在运行一个查询,其中 end_stamp 为空,但我没有看到我帐户下的已关闭用户。我想知道是否有办法从我的 user_name 表中返回最新的 user_name(并且只返回一个)。这是我的查询:

select distinct
users.customer_id,
accounts.customer_id,
USER_NAME.user_name
from CUSTOMER users
inner join CUSTOMER_RELATIONSHIP cr on cr.child_id = users.customer_id
and cr.relationship_type = 1 -- Account/User relationship
inner join CUSTOMER accounts on accounts.customer_id = cr.parent_id
and accounts.customer_id = 25 -- given ID
inner join USER_NAME on USER_NAME.customer_id = users.customer_id
and USER_NAME.end_stamp is null

这不会返回已关闭用户的用户名。如果我删除“并且 USER_NAME.end_stamp 为空”,它将返回我不想要的数据(已过期的用户名)。但是,我确实希望能够看到最近关联的已关闭用户的 user_name。

我如何编写一个查询来排序 USER_NAME 内部连接并获取带有 1) 空 end_stamp 或 2) 最近 start_stamp 的条目?

最佳答案

我建议使用相关子查询:

select c.*,
(select un.user_name
from user_name un
where un.customer_id = c.customer_id
order by (end_stamp is null) desc, end_stamp desc
limit 1
) as most_recent_user_name
from customers c;

关于php - 如何在 MySQL 中订购/限制内部连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47601957/

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