gpt4 book ai didi

mysql - 通过再添加一个左连接来改变结果

转载 作者:行者123 更新时间:2023-11-29 02:01:25 24 4
gpt4 key购买 nike

以下是我的两个查询,其中仅添加一个左连接结果就搞砸了。第二个查询结果是准确的,但在第一个查询中,再添加一个左连接输出是不正确的(如您所见,我只添加了一个左连接,但我没有在 where 子句中对该连接进行任何过滤)。请让我知道我该如何解决这个问题?谢谢,

第一个查询:

SELECT Distinct  count(event_id) as event_count from events 
Left Join events on events.event_id = my_events.i_event_id
Left Join atdees on events.event_id = atdees.fk_event_id

where my_events.v_title != "NULL" and r_present = 1 and resident_id = '208' and event_atd > date_sub(curdate(), interval 37 day) group by event_count order by event_count desc limit 5

结果:

26  |  12   |  11   |   10

第二个查询:

SELECT Distinct  count(event_id) as event_count from events 
Left Join events on events.event_id = my_events.i_event_id

where my_events.v_title != "NULL" and r_present = 1 and resident_id = '208' and event_atd > date_sub(curdate(), interval 37 day) group by event_count order by event_count desc limit 5

结果:

2  |  1   |  1   |   1

最佳答案

左连接的作用是添加额外的(重复的)行。

如果去掉 count 并只列出行,您会看到很多重复的行。
这是因为您要求 eventsatdees 之间的叉积;当然,除了事件之外,还有更多的事件和出席者组合。

真正的基本逻辑。

将您的热门查询更改为

SELECT count(distinct event_id) as event_count from events 
Left Join events on events.event_id = my_events.i_event_id
Left Join atdees on events.event_id = atdees.fk_event_id

where my_events.v_title != "NULL" and r_present = 1 and resident_id = '208'
and event_atd > date_sub(curdate(), interval 37 day)
group by event_count
order by event_count desc
limit 5

而且您应该得到相同的结果(虽然这要慢得多)

进一步注意,left join不过滤,它们添加东西。
如果你想过滤你会使用inner joins
(这是一个严重的过度简化)

关于distinct
distinct 关键字可以在聚合函数内部和外部使用。如果你在内部使用它,它只会计算(求和等)唯一值。如果您在聚合函数之外使用它,它只会列出唯一的行。

即:distinct 本身会消除重复行(它适用于结果集中的所有列)。

函数中的

distinct 仅用作该函数的过滤器。

关于mysql - 通过再添加一个左连接来改变结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13955235/

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