2017-07-03 8 views
1

私は重複IPの数を見るために左結合を使ってビューを作成しました。このビューでmysql join and insert文

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; 

私はこのクエリを実行すると、私は1つの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

最初のクエリステートメントが正常に動作し、2番目のクエリステートメントが無効な値を示しています。

2番目のクエリステートメントを使用して最初のクエリステートメントの結果を取得するにはどうすればよいですか?

+0

'a.ip = b.ip' AS構文エラーです、それは '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

私はその構文エラー部分をチェックしませんでした。ごめんなさい。 あなたに感謝、私は問題を解決することができます –