快速获取MySQL中2列的差异

时间:2009-05-25 07:16:17

标签: sql mysql mediawiki

如何获取另一列中没有匹配的列的字段?

我试过了:

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时,我当前的wiki条目不会被覆盖。

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

4 个答案:

答案 0 :(得分:0)

您可以尝试我过去使用的自联接,但我不确定这是否会更快,因为我不使用MySQL。此页面可能会为您提供一些见解:http://www.xaprb.com/blog/2006/10/11/how-to-delete-duplicate-rows-with-sql/

答案 1 :(得分:0)

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

希望有所帮助

(感谢Aaron F的评论)

答案 2 :(得分:0)

Rax答案略有改进:

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

你的桌子的page_title列上有索引吗?解释计划对您的疑问说了什么?

我无法想象你需要一个索引,因为你的表中只有70k行。

答案 3 :(得分:0)

您可以通过加入来执行此操作:

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)

上添加索引