gpt4 book ai didi

mysql - 多重连接中使用哪种JOIN类型

转载 作者:行者123 更新时间:2023-11-29 22:21:05 26 4
gpt4 key购买 nike

我有 4 个表想要加入。

  1. 客户
  2. 交通
  3. 平均
  4. 直播

我想将这些表的联接数据插入到“详细信息”表中。表之间的关系如下:每个 Traffic、Average 和 Live 表都有一个“cid”,它是“Customers”表的主键:

  • Traffic.cid = Customers.id
  • Average.cid = Customers.id
  • Live.cid = Customers.id

我写的查询在这里:

INSERT INTO Details
(
cid, Customer_Name, Router_Name,
Traffic_Received,
Average_Received,
Live_Received,
date
)
(
SELECT Customers.id AS cid, Customers.name AS Customer_Name, Traffic.Router_Name,
Traffic.Received,
Average.Received,
Live.Received,
Traffic.date
FROM Customers
INNER JOIN Traffic ON Customers.id=Traffic.cid
INNER JOIN Average ON Customers.id=Average.cid
INNER JOIN Live ON Customers.id=Live.cid
WHERE Traffic.date='2015-06-08'
)

但是结果会有重复的行。我将 JOIN 更改为 LEFT JOINRIGHT JOIN。但结果没有改变。我应该怎么做才能避免 Details 表中出现重复的行?

最佳答案

使用LEFT JOIN,即使没有与Customers.id 对应的记录,您也将加入表(例如Traffic) ,在这种情况下,您将获得此表中没有匹配记录的列的 null 值。

使用RIGHT JOIN,即使Customers中没有相应的记录,您也将从连接表中获取每条记录。

但是,JOIN 的类型不是这里的问题。如果结果中出现重复记录,则意味着您要加入的表中存在多个匹配记录。例如,Traffic 中可能存在多个具有相同 cid 的记录。使用 SELECT DISTINCT 删除重复项,或者如果您对这些重复项的聚合感兴趣,请使用聚合函数,例如 count()sum() 和一个 GROUP BY 子句,例如按 Traffic.cid 分组

如果仍有重复项,请检查以确保它们确实是重复项 - 我建议一列或多列实际上是不同的。

关于mysql - 多重连接中使用哪种JOIN类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30706834/

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