1

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

我试过:

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

但它只是挂起。

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

PS 我这样做是为了为 mediawiki 的 MWDumper 工具创建一个排除列表。我需要它,这样当我导入输出的 sql 时,我当前的 wiki 条目不会被覆盖。

编辑:是的,它们是 2 张不同的桌子。每个都有大约 70,000 多条记录 另外为什么我的查询很慢?如果有人能澄清一下,我将不胜感激,以便我了解原因:) 再次感谢!

4

4 回答 4

0

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

于 2009-05-25T07:28:15.510 回答
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

希望有帮助

(感谢亚伦 F 的评论)

于 2009-05-25T07:31:18.470 回答
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 行。

于 2009-05-25T07:40:11.367 回答
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) 上添加索引

于 2009-05-25T07:52:16.180 回答