如何获取另一列中没有匹配的列的字段?
我试过了:
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多条记录 为什么我的查询速度慢?我很感激,如果有人可以澄清,那么我可以了解为什么:)再次感谢!
答案 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)
上添加索引