如何得到一个列,如果没有匹配的另一列的字段?

我尝试:

SELECT table1.page_title 
FROM table1, table2 
WHERE table1.page_title != table2.page_title

它产生了很多重复的字段所以我做了的:

SELECT DISTINCT table1.page_title 
FROM table1, table2 
WHERE table1.page_title != table2.page_title

,但它只是挂起。

任何帮助将不胜感激,谢谢!

P.S。 我这样做,所以我可以创造MediaWiki的MWDumper工具排除列表。我需要它,这样,当我导入输出SQL,我现在的维基条目不会被覆盖。

编辑: 是的,他们是2个不同的表。每个人都有大约20000条记录 也是为什么是我的查询速度慢?我会很感激,如果有人可以澄清,所以我可以了解为什么:)再次感谢!

有帮助吗?

解决方案

是a和b不同的表,都具有 “PAGE_TITLE” 列?

如果是这样,尝试:

SELECT DISTINCT page_title FROM a
WHERE page_title NOT IN (SELECT page_title FROM b)

如果你感兴趣的是删除重复(如果你只有一个表),那么有几种方法可以做到这一点,其中两个是:

SELECT DISTINCT page_title FROM a

SELECT page_title FROM a
GROUP BY page_title

在GROUP BY选项虽然速度较慢强 - 你可以添加一个HAVING子句只选择那些出现如标题两倍以上:

SELECT page_title FROM a
GROUP BY page_title
HAVING COUNT(page_title) > 2

希望帮助

(感谢亚伦F显示了评论)

其他提示

您可以尝试自连接,这是我在过去都用过,但我不知道这会是任何更快,因为我不使用MySQL。此页面可能给你一些启示:的 http://www.xaprb.com/blog/2006/10/11/how-to-delete-duplicate-rows-with-sql/

在RAX的回答略有改善:

SELECT DISTINCT a.page_title FROM a
WHERE a.page_title NOT IN (SELECT DISTINCT b.page_title FROM b)

做你的表对他们PAGE_TITLE列的索引?是什么解释计划为您的疑问说?

我无法想象你反正需要一个索引,在表中只给出70K行。

您可以用加入做到这一点

SELECT DISTINCT table1.page_title 
FROM table1
LEFT JOIN table2 
    ON table1.page_title = table2.page_title
WHERE table2.page_title is null

如果它的速度慢,在添加索引(table2.page_title)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top