mysql join和insert语句

时间:2017-07-03 08:36:52

标签: mysql sql

我使用左连接创建了一个视图,以查看重复的ip的数量。

在此视图中

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

但是,如果我检查整个id中重复的ip的数量

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

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

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

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

1 个答案:

答案 0 :(得分:1)

使用GROUP BY a.id, b.id,以便为您加入的每个a.id获取单独的计数。

此处也没有理由使用LEFT JOIN。由于您自己加入了视图,因此始终会有匹配的行。只需使用正常的INNER JOIN

WHERE条款完全无效。如何将放在同一视图中的不同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;