2012-02-25 3 views
0

У меня есть два текстовых файла со 100 тысячами строк. Каждая строка имеет десять цифр. В обоих файлах могут быть одинаковые строки, и я хочу их фильтровать. Например: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'.'cjsz' FROM' table1' INNER JOIN 'table2' ON' table1'.'cjsz'! = 'Table2'.'cjsz' WHERE LENGTH (' table1' .'26_code') = 0; – user1223445

+0

Добро пожаловать в stackoverflow. Можете ли вы рассказать о «не дающем ожидаемого результата»? Используя ваш предыдущий пример, каковы фактические * результаты и что вы ожидали вместо этого? Это поможет другим понять, чего вы пытаетесь достичь. – Leigh

ответ

0

, чтобы получить все идентификаторы в таблице 1, не в table2

select cjsz from table1 
MINUS 
select cjsz from table2 

, чтобы получить все идентификаторы в таблице 2 не в table1

select cjsz from table2 
MINUS 
select cjsz from table1 

, чтобы получить все идентификаторы в обоих таблице 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

, он хочет симметричную разницу в таблице 1 и таблице 2 –

0

Вы можете использовать оператор EXCEPT, если вы используете SQLServer, в противном случае вы можете попробовать эту команду:

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

Если я получу вас в правильном направлении, вы смотрите symmetric difference между Table1 и Table2. После поиска в Интернете, я нашел хороший 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; 
Смежные вопросы