2つのリストがありますが、list1からlist2を除外したいと思います。

2つのリストがありますが、list1からlist2を除外したいと思います。

リスト1:

1,name1                   
2,name2                    
3,name3                  
4,name4                   
5,name5                  
6,name6                  
7,name7                  
8,name8                  
9,name9                  

リスト2:

3
13
14
6
1
7
15
26

次の出力が必要です。

2,name
4,name
5,name
8,name
9,name

出力には列1の項目を含める必要があります。リスト1どんなものはありませんか?リスト2

リスト1そしてリスト2ソートされていませんが、必要に応じて両方のリストをソートします。
リスト1約60,000のレコードがあり、List2には20,0000のレコードが含まれています。 Linuxシェルまたはmysql

ベストアンサー1

以下を使用すると仮定しますbash(そうでない場合、およびを使用して入力ファイルを事前にソートし、手続き型置換のsort -o List1 List1代わりにsort -o List2 List2使用)。List1 List2

$ join -t, -v1 <( sort List1 ) <( sort List2 )
2,name2
4,name4
5,name5
8,name8
9,name9

これにより、2つのファイル間でリレーショナルJOIN操作が実行され、まずその内容がソートされます。カンマをフィールド区切り文字として扱うように指示し、-t,最初のファイルのエントリが2番目のファイルのエントリに関連付けられないようにします。デフォルトでは、接続は各ファイルの最初のフィールドで行われます。join-v1

最後の整数を削除するには:

join -t, -v1 <( sort List1 ) <( sort List2 ) | sed 's/[0-9]*$//'

MySQLソリューションでは、関連テーブルのSQLスキーマを提供する必要がありますが、結果のクエリは次のとおりです。

SELECT * FROM table1 WHERE joinfield1 NOT IN (SELECT joinfield2 FROM table2);

おすすめ記事