gpt4 book ai didi

mysql - 使用 Group by 后在 Left join 中丢失记录

转载 作者:行者123 更新时间:2023-11-29 07:14:45 26 4
gpt4 key购买 nike

基本上在执行这个查询之后:

SELECT
`view_customer_locations`.customerid,
`view_customer_locations`.community_groupid,
`view_customer_locations`.community_group,


`view_sip_user_agents`.sip_user_agentid,
`view_sip_user_agents`.didid,
`view_sip_user_agents`.temporary_didid,
`view_sip_user_agents`.active_did,
GROUP_CONCAT( (IF(`view_sip_user_agents`.active_did = 'permanent', cast(`permanent_dids`.did as char(10)), cast(`temporary_dids`.did as char(10)))) SEPARATOR ', ') as did,

`view_sip_user_agents`.sip_user_agents_date_archived

FROM `view_customer_locations`
LEFT JOIN `view_sip_user_agents` on `view_customer_locations`.customerid = `view_sip_user_agents`.customerid
LEFT JOIN `dids` AS permanent_dids ON `view_sip_user_agents`.didid = `permanent_dids`.id
LEFT JOIN `dids` AS temporary_dids ON `view_sip_user_agents`.temporary_didid = `temporary_dids`.id
Group by `view_customer_locations`.customerid

我仍然想要 view_customer_locations 表中的所有行.. 但是我丢失了 view_customer_locations 表中的所有条目,这些条目在 view_sip_user_agents 表中没有相应的记录。我还希望条目按 customerid 分组......这样每个客户在结果查询中只有一个条目。

如果我删除 group by 子句,我会从 view_customer_locations 表中获取所有内容,但自然每个客户有多个条目,这不是我想要的。

请帮忙

最佳答案

虽然 MySQL 确实允许您“逃脱”表达一个 GROUP BY 子句,在 SELECT 中的字段可能会随着 GROUP BY 字段(理论上选择一个“任意/随机值”),正如您所注意到的,这种构思不当、逻辑上没有充分根据的操作的结果有时令人惊讶。

尝试使用正确的 SQL,例如在您“分组依据”的字段上使用 MAX 运算符。如果这些字段严格由分组依据字段确定的隐含假设是正确的,那么这不可能以任何方式损害您的结果,对吗?但有时您会发现结果确实出现或发生了变化(这意味着隐含的假设是错误的)。

在您的情况下,由于某些字段在组中可能统一为 NULL,并且在这种情况下 MAX 不一定定义明确,您可以进一步尝试当然可以在那里使用 IFNULL

关于mysql - 使用 Group by 后在 Left join 中丢失记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2076227/

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