Usuário com melhor resposta
Ajuda com WHERE

Pergunta
-
é o seguinte galera:
tenho duas tabelas, uma com o campo KEYWORD (tabela1), e outra com o campo CODIGO (tabela2):
preciso saber, quais os registros da tabela1, tem o campo KEYWORD, DIFERENTE da tabela2.
Tabela1, vem de uma importacao do Excel, tem o campo KEYWORD, varchar(8);
Tabela2, veio importada de outro banco, com o campo CODIGO varchar(8);
Até ai, tudo certo:
Fiz um teste,
select * from Tabela1 where codigo = 'SFC-0027'
select * from Tabela2 where KeyWord = 'SFC-0027'
e ele me retornou dados nas duas queries, ou seja, os dados são iguais.
Quando vou fazer assim:
select distinct A.KeyWord
FROM Tabela1 A, tabela2 B
where not A.KeyWord = B.codigo
ele retorna um erro: Cannot resolve collation conflict for not equal to operation.
Entao, usei o select assim
where not A.KeyWord COLLATE Latin1_General_BIN like B.codigo COLLATE Latin1_General_BIN
Mas, nao sei pq raios, ele retorna o valor SFC-0027 como se fosse diferente da tabela1 para a tabela2
Estou quase chorando ja, sera que alguem pode me ajudar ????
Valeu
Eduardo Portescheller
eduardo.portescheller@eds.comsegunda-feira, 10 de março de 2008 18:09
Respostas
-
Eduardo, segue outro exemplo:
Code SnippetSelect Distinct A.Call, A.Inbox, A.Keyword, A.EDS_Code
From ProFev2008 A
Where A.Keyword Not In (Select B.Keyword From Pro B)
And A.EDS_Code Not In (Select C.Eds_Code From Pro C)
Espero ter ajudado!
Abraços,
- Marcado como Resposta Eduardo Portescheller quinta-feira, 14 de outubro de 2010 01:21
terça-feira, 11 de março de 2008 21:14
Todas as Respostas
-
Portescheller,
Já tentou utilizar algum join?
Code Snippetselect distinct A.KeyWord
FROM Tabela1 A Inner Join tabela2 Bon A.KeyWord = B.codigo
segunda-feira, 10 de março de 2008 19:19Moderador -
sim, ja tentei assim:
select distinct A.KeyWord
FROM ProFevereiro2008 A Inner Join PRO_CONS B
on not A.KeyWord COLLATE Latin1_General_BIN = B.codigo COLLATE Latin1_General_BIN
mas mesmo assim nao da, ele continua mostrando que o valor que é IGUAL nas duas tabelas, como diferente...
alguma outra ideia ?
Obrigado.segunda-feira, 10 de março de 2008 19:29 -
Eduardo,
O Collation dos dois campos estão iguais, em ambas tabelas?
Você pode verificar pelo sp_help 'nometabela'
Pelo que entendi, você quer verificar todos os Keyword que estão na Tabela1 que não estão na Tabela2, certo?
Segue um outro exemplo de query:
Code SnippetSelect
Distinct A.KeyWordFrom
Tabela1 AWhere
A.Keyword Not In (Select Distinct B.Keyword From Tabela2 B)Espero que te ajude!
Abraços,
terça-feira, 11 de março de 2008 14:17 -
Fernando, bom dia !
Valeu pela dica
Realmente estao diferentes:
sp_help 'ProFevereiro2008' --Latin1_General_CI_AS
sp_help 'PRO_CONS' -- SQL_Latin1_General_CP1_CI_AS
Agora, como faço para deixa-las com o mesmo COLLATION ?
TKS
Eduardo.terça-feira, 11 de março de 2008 15:27 -
Portescheller,
Através da ferramenta de designer de tables existentes no SQL Server você pode alterar o collate, ou se preferir veja este exemplo:
Code SnippetCreate
TAble Teste (Descricao VarChar(10) Collate Latin1_General_CI_AS)Alter
TAble teste Alter Column Descricao VarChar(10) Collate SQL_Latin1_General_CP1_CI_ASterça-feira, 11 de março de 2008 17:36Moderador -
Opa, então qual das tabelas que é a real de produção?
Vou mandar um exemplo:
Code SnippetCREATE
TABLE #TesteC (nome varchar(10) COLLATE Latin1_General_CI_AS,nome2
varchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS)Insert
#TesteC Values ('Teste', 'Teste')Alter
Table #TesteCAbraços,
terça-feira, 11 de março de 2008 17:39 -
deixa te mostrar o que fiz agora:
tenho a tabela:
Tabela ProFev2008
CALL INBOX KEYWORD EDS_CODE
401-01-4466023 RDM - VRDB NULL NULL
401-01-4466024 HD - VRDB CRP-0001 NULL
Tabela PRO
CODIGO
CRP-0001
CRP-0002
CRP-0003
Agora, preciso saber, na tabela ProFev2008, quais os registros que tem os valores KEYWORD e EDS_CODE
diferentes da tabela PRO
fiz o seguinte:
select distinct A.Call, A.Inbox,
A.KeyWord, A.EDS_Code
FROM ProFev2008 A Inner Join PRO B
on (A.KeyWord <> B.codigo)
and
(A.EDS_Code <> B.codigo)
Ele a tabela ProFev2008, tem 43 mil e poucos registros, e a tabela PRO, 3 mil e poucos
Mas neste exemplo, ele deveria mostrar apenas a linha 1, certo ?
Mas ele ta mostrando a linha dois tambem, mas a porcaria do CRP-0001 é igual nas duas, portanto nao deveria aparecer.
Mas essa porra esta me deixando louco, e esta aparecendo !
To fazendo algo de errado ???
Valeu
(a parte dos COLLATE, eu ja arrumei, as duas tabelas estao com o COLLATE Latin1_General_CI_AS)terça-feira, 11 de março de 2008 19:31 -
Eduardo, segue outro exemplo:
Code SnippetSelect Distinct A.Call, A.Inbox, A.Keyword, A.EDS_Code
From ProFev2008 A
Where A.Keyword Not In (Select B.Keyword From Pro B)
And A.EDS_Code Not In (Select C.Eds_Code From Pro C)
Espero ter ajudado!
Abraços,
- Marcado como Resposta Eduardo Portescheller quinta-feira, 14 de outubro de 2010 01:21
terça-feira, 11 de março de 2008 21:14 -
Também se pode converter o collate antes de fazer a comparação assim não é necessário alterar as tabelas:
http://msdn2.microsoft.com/en-us/library/ms187928.aspx "procurar: collate"
SELECT CAST('abc' AS varchar(5)) COLLATE Collate_Desejadosegunda-feira, 24 de março de 2008 13:37