0

我有 4 个要加入的表。

  1. Customers
  2. Traffic
  3. Average
  4. Live

我想将这些表的连接数据插入到“详细信息”表中。表之间的关系在这里:每个 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'
)

但结果将有重复的行。我将 和 更改JOINLEFT JOINRIGHT JOIN。但结果没有改变。我应该怎么做才能在表中没有重复的行Details

4

3 回答 3

0

你能试试这个吗

        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'
    GROUP BY
        cid,
        Customer_Name,
        Traffic.Router_Name,
        Traffic.Received, 
        Average.Received,
        Live.Received, 
        Traffic.date
    )
于 2015-06-08T10:44:04.013 回答
0
SELECT Customers.id AS cid, Customers.name AS Customer_Name, Traffic.Router_Name,
Traffic.Received, 
Average.Received,
Live.Received, 
Traffic.date
FROM Customers
LEFT JOIN Traffic ON Customers.id=Traffic.cid
LEFT JOIN Average ON Traffic.cid=Average.cid
LEFT JOIN Live ON Average.cid=Live.cid
WHERE Traffic.date='2015-06-08'
于 2015-06-08T10:51:55.437 回答
0

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

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

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

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

于 2015-06-08T12:52:28.410 回答