gpt4 book ai didi

SQL Join 返回重复的查询结果

转载 作者:行者123 更新时间:2023-12-03 17:56:07 24 4
gpt4 key购买 nike

我正在使用 SQLite。我有 2 张表,一张是事件中的工作人员列表,其中包含事件 ID 和事件详细信息。
另一个表包含 worker 缺勤的详细信息,以及他们打算参加的事件 ID。

我想返回一个 worker 的缺席历史(来自表 Absent)并包括来自该事件中的任何 worker 的事件详细信息(来自表事件)。

我正在返回我想要的东西,但是这些行与事件中的 worker 数量重复。因此,如果有 3 个工作人员的事件 100 中没有工作人员 John,则查询将返回:

John, Event 100, Event 100 Details
John, Event 100, Event 100 Details
John, Event 100, Event 100 Details

查询是:
 SELECT mm.WorkerID, mm.EventID, ar.EventDetails FROM AbsentTable AS mm  
LEFT JOIN EventsTable AS ar
ON mm.EventID = ar.EventID
WHERE mm.WorkerID = :WorkerID

我正在简化事情,因为我想弄清楚我的代码没有修复的原因。为什么查询返回倍数?我尝试了许多替代方法,包括选择行中的 distinct。

最佳答案

I have 2 tables, one is a list of workers at an event, with event ID and event details.



问题是 EventsTable包含每个事件的多条记录。您的加入会返回与事件中的工作人员一样多的记录。

一种解决方案是使用选择 DISTINCT 的子查询。您感兴趣的值来自 EventsTable , 然后用 AbsentTable 加入它.
SELECT mm.WorkerID, mm.EventID, ar.EventDetails 
FROM AbsentTable AS mm
LEFT JOIN (SELECT DISTINCT EventID, EventDetails FROM EventsTable) AS ar
ON mm.EventID = ar.EventID
WHERE mm.WorkerID = :WorkerID

底线:你有一个设计问题。在 EventsTable 中的多条记录上重复相同的信息(事件详细信息、事件 ID) .最好有一个单独的表来存储事件(每个事件一个记录),然后在跟踪每个事件中每个工作人员的存在的表中引用该表的主键。

关于SQL Join 返回重复的查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58053266/

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