我使用左连接创建了一个视图,以查看重复的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所需的数据。
但是,如果我检查整个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;
其他价值观出现了。
第一个查询语句正常工作,第二个查询语句显示无效值。
如何使用第二个查询语句获取第一个查询语句的结果?
答案 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;