リスト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);