Pergunta

como faço para obter os campos de uma coluna isso sem uma partida em outra coluna?

Eu tentei:

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

Ela produz um monte de campos duplicados então eu fiz a:

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

Mas isso só trava.

Qualquer ajuda seria muito apreciada, obrigado!

P.S. Estou fazendo isso para que eu pudesse criar uma lista de exclusão para MediaWiki ferramenta MWDumper. Eu preciso dele para que quando eu importar o sql emitido, minhas entradas wiki atuais não serão substituídos.

EDIT: Sim eles são 2 tabelas diferentes. Cada um tem cerca de 70.000 registros Também por isso são as minhas consultas lenta? Eu apreciaria se alguém pudesse esclarecer para que eu pudesse aprender por que :) Thanks again!

Foi útil?

Solução

Tem a e b tabelas diferentes, ambos com uma coluna "page_title"?

Se assim for, tente o seguinte:

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

Se tudo que você está em interessado é a remoção de duplicatas (se você só tem uma tabela), então existem várias maneiras de fazer isso, dois dos quais são:

SELECT DISTINCT page_title FROM a

ou

SELECT page_title FROM a
GROUP BY page_title

O GROUP BY opção é mais forte embora mais lento - você pode adicionar uma cláusula de ter de escolher apenas os títulos que aparecem, por exemplo, mais de duas vezes:

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

Espero que ajude

(Obrigado Aaron F para o comentário)

Outras dicas

Você poderia tentar uma auto-associação, que eu usei no passado, mas eu não tenho certeza se isso seria mais rápido, como eu não usar o MySQL. Esta página pode lhe dar algumas dicas: http://www.xaprb.com/blog/2006/10/11/how-to-delete-duplicate-rows-with-sql/

ligeira melhoria na resposta de Rax:

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

fazer suas tabelas têm um índice em sua coluna page_title? O que significa a palavra plano de explicar para suas consultas?

Eu não posso imaginar que você precisar de um índice de qualquer forma, dado apenas 70k linhas em sua tabela.

Você pode fazer isso com uma junção:

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

Se ele é lento, adicionar um índice em (table2.page_title)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top