gpt4 book ai didi

SQLite 连接在第一个正确记录后导致重复数据

转载 作者:行者123 更新时间:2023-12-02 20:32:44 26 4
gpt4 key购买 nike

我遇到一个问题,即在 Select 语句中的第一条记录之后,特定列中的数据在 Select 语句中重复。我将提供我正在使用的声明:

SELECT Call.CallID AS [Call #],
(Members.FirstName || ' ' || Members.LastName) AS OIC,
Alarm.AlarmID,
Alarm.AlarmDesc AS Alarm,
--Group_Concat(m2.FirstName || ' ' || m2.LastName) AS [Line Officers],
Group_Concat(m1.FirstName || ' ' || m1.LastName) AS Members
FROM Call
LEFT JOIN
Members ON Call.OIC = Members.MemberID
LEFT JOIN
Alarm ON Call.AlarmID = Alarm.AlarmID
LEFT JOIN
CallToMembers ON Call.CallID = CallToMembers.CallID
--LEFT JOIN
--CallToLineOfficers on Call.CallID = CallToLineOfficers.CallID
LEFT JOIN
Members AS m1 ON CallToMembers.MemberID = m1.MemberID
--LEFT JOIN
--Members as m2 on CallToLineOfficers.MemberID = m2.MemberID
GROUP BY Call.CallID;

好的,这个语句返回了我需要的所有内容并且工作正常。但是,每当我取消注释已注释掉的行以便可以从桥接表“CallToLineOfficers”获取“LineOfficers”时,数据就会开始从列内复制,如下所示:

完整的选择语句不正确- 没有任何评论。 Incorrect Complete Select Statement正确的直线官员- 如果我评论 CallToMembers 的加入。 Correct Line Officers正确的成员- 如果我评论 CallToLineOfficers 的加入。 Correct Members

正如您所看到的,一旦我介绍了“成员”和“直线官员”,事情就会出错。

最佳答案

当您加入与线路官员的通话时,您会得到如下中间结果:

Call #  Line Officers
------ -------------
54 Bob Clark
54 Rob Catalano

当您加入成员时,数据库会再次匹配索书号,因此对于中间结果中的每一行,您都会获得与成员的所有组合:

Call #  Line Officers  Members
------ ------------- -----------
54 Bob Clark Matt Butler
54 Rob Catalano Matt Butler
54 Bob Clark Tom Cramer
54 Rob Catalano Tom Cramer
...

因此,当您有多个具有 1:N 关系的独立表时,您不能使用联接。

无论如何,您实际上并不希望结果中有多个直线官员/成员行,因此您可以使用子查询来聚合这些值:

SELECT CallID,
(SELECT group_concat(FirstName || ' ' || LastName)
FROM CallToLineOfficers
JOIN Members USING (MemberID)
WHERE CallID = Call.CallID
) AS "Line Officers",
(SELECT group_concat(FirstName || ' ' || LastName)
FROM CallToMembers
JOIN Members USING (MemberID)
WHERE CallID = Call.CallID
) AS Members
FROM Call;

关于SQLite 连接在第一个正确记录后导致重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43216317/

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