2012-02-25 45 views
0

私は約100,000行のテキストファイルを2つ持っています。すべての行には10桁の数字があります。 2つのファイルに同じ行があり、それらをフィルタリングする必要があります。たとえば、次のように大きなファイルのSQLクエリ

FILE1:

1256745889 
1515487882 <---same 
4841453222 

...

FILE2:

7748523695 
1515487882 <---same 
8745529699 

...

これは私の実際のSQLクエリです

SELECT 
    table1.cjsz 
FROM 
    table1 
    INNER JOIN table2 ON 
     table1.cjsz != table2.cjsz 
WHERE 
    LENGTH(table1.26_code)=0; 

予想された結果が得られていません。あなたは私にこれに手を差し伸べることができますか?

おかげ

+0

'' table1' INNERがtable1'.'cjsz' '' ON table2' のJOIN FROM table1'.'cjsz' を選択!= 'table2'.'cjsz' WHERE LENGTH(' table1' 「26_code」)= 0; – user1223445

+0

ようこそstackoverflowへ。あなたは "期待された結果を出さない"ことについて詳しく説明できますか?前の例を使って、*実際の結果は何ですか?代わりにあなたは何を期待していましたか?それは他の人があなたが達成しようとしていることを理解するのに役立ちます。 – Leigh

答えて

0

は、両方のテーブル内のすべてのIDを取得するには表1に表2のすべてのIDSない

select cjsz from table2 
MINUS 
select cjsz from table1 

を取得するために、table2の

select cjsz from table1 
MINUS 
select cjsz from table2 

に表1のすべてのidをしませ取得します1および表2

select cjsz from table1 
INTERSECT 
select cjsz from table2 
+0

完全性のために: 'select cjsz from table1 UNION select cjsz from table2' これは、両方からすべての一意の行を選択します。 – Wolph

+0

'MINUS'はOracleのみの演算子です。標準演算子は「EXCEPT」 –

0

ない正確あなたが達成しようとしているのかわからが、あなたのようなものを試してみました:

SELECT table1.cjsz WHERE LENGTH(table1.[26_code]) = 0 
EXCEPT 
SELECT table2.cjsz 
+0

彼はTable1とTable2の対称の差を求めています –

0

あなたがのSQLServerを使用している場合は、そうでなければ、このコマンドを試すことができ、EXCEPT演算子を使用することができます。

SELECT 
    table1.cjsz 
FROM 
    table1 LEFT OUTER JOIN table2 ON table1.cjsz = table2.cjsz 
WHERE 
    table2.cjsz IS NULL AND LENGTH(table1.26_code) = 0 
0

正しい方向に向ければ、表1と表2の間にsymmetric differenceがあります。 Webで検索した結果、blog entryがこれに関するSQLサンプルを提供していました。私は自分のサンプルを準備しました。あなたに必要なものがあるかどうか教えてください。

CREATE TABLE Table1 (id int, value char(1)); 

INSERT INTO Table1 values (1, 'H'); 
INSERT INTO Table1 values (2, 'e'); 
INSERT INTO Table1 values (3, 'l'); 
INSERT INTO Table1 values (4, 'l'); 
INSERT INTO Table1 values (5, 'o'); 
INSERT INTO Table1 values (6, ' '); 
INSERT INTO Table1 values (7, ' '); 

CREATE TABLE Table2 (id int, value char(1)); 

INSERT INTO Table2 values (6, ' '); 
INSERT INTO Table2 values (7, ' '); 
INSERT INTO Table2 values (8, ' '); 
INSERT INTO Table2 values (9, 'w'); 
INSERT INTO Table2 values (10, 'o'); 
INSERT INTO Table2 values (11, 'r'); 
INSERT INTO Table2 values (12, 'l'); 
INSERT INTO Table2 values (13, 'd'); 


SELECT * 
    FROM (
    SELECT a.id, a.value FROM Table1 a 
    UNION ALL 
    SELECT b.id, b.value FROM Table2 b 
) AS t 
    GROUP BY t.id, t.value 
    HAVING COUNT(id) = 1 
ORDER BY id; 
関連する問題