2017-07-03 87 views
1

我使用左连接创建了一个视图来查看重复的ip数量。mysql加入并插入语句

在此视图

SELECT 
    a.id, 
    b.id, 
    COUNT (b.id), 
    a.ip 
FROM 
    `VIEW` AS a 
LEFT JOIN 
    `VIEW` AS b on a.ip = b.ip 
WHERE 
    a.id = 298 
GROUP BY 
    b.id; 

当我执行此查询时,我得到了我想要一个ID的数据。

first query execute result

不过,如果我检查重复的IP的数量在整个ID

,并执行以下查询,将其存储在表中。

INSERT 
INTO 
    TABLE 
SELECT 
    a.id, 
    b.id, 
    COUNT (b.id), 
    a.ip 
FROM 
    `VIEW` AS a 
LEFT JOIN 
    `VIEW` AS a.ip = b.ip 
WHERE 
    a.id IN 
      (
      SELECT DISTINCT 
       id 
      FROM 
       `VIEW`) 
GROUP BY 
    b.id; 

其他值出来。

second query execute result

第一个查询语句工作正常,第二查询语句显示无效值。

如何使用第二个查询语句来获取第一个查询语句的结果?

+0

'AS a.ip = b.ip'是一个语法错误,它应该是'ON a.ip = b.ip' – Barmar

+0

你没有ON子句。困惑。 – Strawberry

+0

撇开 - 你为什么称你的观点'观点',尝试并提出更多的描述性名称。 –

回答

1

使用GROUP BY a.id, b.id,以便您为每个加入的a.id分别计数。

这里也没有理由使用LEFT JOIN。既然你自己加入了视图,总会有一个匹配的行。只需使用正常的INNER JOIN即可。

WHERE条款是完全无效的。如何将id 而不是列入同一视图中不同ID的列表中?摆脱这个条款。

你也有一个语法错误:

JOIN `VIEW` AS a.ip = b.ip 

应该是:

JOIN `VIEW` AS b ON a.ip = b.ip 

正确的查询应该是:

INSERT 
INTO 
    TABLE 
SELECT 
    a.id, 
    b.id, 
    COUNT(*), 
    a.ip 
FROM 
    `VIEW` AS a 
JOIN 
    `VIEW` AS b ON a.ip = b.ip 

GROUP BY 
    a.id, b.id; 
+0

我没有检查那个语法错误部分。对不起。 感谢你,我可以解决问题 –