MySQL-あるフィールドの値をフィルターとして使用して別のフィールドの値をカウントし、2つのテーブルのデータを組み合わせる方法は?

ヌカロフ

私はこれに頭を悩ませてきました、そして解決策はおそらくとても単純ですが、私はそれを理解することができず、どこでも検索し、この特定の問題の解決策を見つけることができません。

2つのテーブルがあります。1つにはIP接続リストが含まれています。例:

Connections_Table

src            dst
192.168.1.1    1.2.3.4
192.168.1.1    2.2.2.2
192.168.1.1    3.3.3.3
192.168.1.1    4.4.4.4

もう1つのテーブルには、次のようなIPアドレスのリストが含まれています。

Bad_Ip_Addresses_Table

ip
7.8.9.4
3.2.1.4
77.8.99.4
2.2.2.2
18.7.9.8

このクエリを作成する方法が見つからない場所です...最初のテーブルのsrcとdstを示し、2番目のテーブルに最初のテーブルのdstが含まれているかどうかを示すテーブルを作成しようとしています。言い換えると:

Results_Table

src            dst        match
192.168.1.1    1.2.3.4    0
192.168.1.1    2.2.2.2    1
192.168.1.1    3.3.3.3    0
192.168.1.1    4.4.4.4    0

これがおそらく最大の落とし穴です。ソリューションにテーブルとトリガーの作成が含まれるSOに関する投稿を見たことがあります。それはできません-これはAWSKinesis AnalyticsSQLステートメントになります。

Connections_Tableはライブで取り込まれ、Bad_Ip_Addresses_TableはAWSS3からロードされたCSVです。取り込まれた各行で、CSVに対してSQLステートメントを実行して、dstipがCSVに含まれているかどうかを確認する必要があります。

助言がありますか?

マドゥルバイヤ
  • MySQLの、することができますLeft JoinからConnections_TableBad_Ip_Addresses_Table、例えばその全てdstの値Connections_Table(一致する行が存在するか否か)であると考えられます。
  • その後、できGroup BysrcdstCount()関数を使用して一致をカウントします。注意してくださいCount(null) = 0; したがって、一致しない行は0を返します(null左結合の後があるため)。

MySQL、次のクエリを試してみてください。

SELECT
  ct.src,
  ct.dst, 
  COUNT(biat.ip) AS match 
FROM 
  Connections_Table AS ct 
LEFT JOIN Bad_Ip_Addresses_Table AS biat ON biat.ip = ct.dst 
GROUP BY ct.src, ct.dst 

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ