SQL查询大文件

时间:2012-02-25 20:55:40

标签: sql

我有两个文本文件,大约有10万行。每行有十位数字。两个文件中可能有相同的行,我想过滤它们。例如:

文件1:

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;

它没有给出预期的结果。你能帮我个忙吗?

由于

4 个答案:

答案 0 :(得分:0)

获取表1中的所有id而不是table2

select cjsz from table1
MINUS
select cjsz from table2

使表2中的所有ID不在table1中

select cjsz from table2
MINUS
select cjsz from table1

获取表1和表2中的所有ID

select cjsz from table1
INTERSECT
select cjsz from table2

答案 1 :(得分:0)

确切确定您要完成的任务,但是您尝试了类似的内容:

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

答案 2 :(得分: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

答案 3 :(得分:0)

如果我让你朝着正确的方向前进,你会看到Table1和Table2之间的symmetric difference。在网上搜索后,我发现了一个很好的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;