Pergunta

Aqui é a situação em que estou. Eu tenho uma tabela que contém informações dos povos. Alguns deles são importados de outro sistema, enquanto alguns são importados manualmente. O que eu gostaria de fazer é puxar todos, mas se há um registro inserido manualmente e um registro que foi importado, quero selecionar apenas o importado (uma vez que é provável mais atualizado).

Aqui está o que eu tenho até agora, mas não parecem funcionar (só retorna os registros inseridos manualmente):

SELECT --fields go here
FROM
        (
                SELECT PERSON_UID, instype
                FROM AdmitsInterfaceTable
                WHERE instype='M' --Manually entered people
            EXCEPT
                SELECT PERSON_UID, instype
                FROM AdmitsInterfaceTable
                WHERE instype='I' --Imported people
        ) P,
        AdmitsInterfaceTable A
     WHERE 
        P.PERSON_UID=A.PERSON_UID
        AND P.instype=A.instype

Eu tenho um sentimento que este não está funcionando por causa da consulta interna também puxando na coluna instype, mas eu não consigo pensar em nenhum melhores maneiras de fazer isso. Algum conselho?

Foi útil?

Solução

 SELECT PERSON_UID, instype
    FROM AdmitsInterfaceTable a
    WHERE instype='I' --get all imported people            
 union -- plus all manuals who are not also imported
 SELECT PERSON_UID, instype
    FROM AdmitsInterfaceTable a
    WHERE instype='M' --Imported people
    and not exists (  -- without imported matches
     select * from FROM AdmitsInterfaceTable b
     WHERE instype='I' and b.person_uid = a.person_uid);

Outras dicas

Você pode tentar:

SELECT CASE WHEN b.person_UID is null THEN a.person_UID ELSE person_UID END, 
CASE WHEN b.person_UID is null THEN a.instype   ELSE instype   END
--and so forth through all the columns you want
FROM
(SELECT PERSON_UID, instype  -- add list of additional fields you need here
from AdmitsInterfaceTable  WHERE instype='M' ) A
LEFT JOIN
(SELECT PERSON_UID, instype  -- add list of additional fields you need here
from AdmitsInterfaceTable  WHERE instype='I' ) B on A.PERSON_UID = B.PERSON_UID
SELECT --fields go here
FROM AdmitsInterfaceTable A
 WHERE 
    P.PERSON_UID=A.PERSON_UID
    AND P.instype=A.instype
AND instype='M' --Manually entered people
AND person_uid not in (
SELECT PERSON_UID FROM AdmitsInterfaceTable
WHERE instype='I' --Imported people
)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top