2017-07-03 88 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

我沒有檢查那個語法錯誤部分。對不起。 感謝你,我可以解決問題 –