Tenho um banco de dados de nomes científicos de aves e quero obter o ID da espécie que está relacionada a uma subespécie. Provavelmente preciso usar uma consulta de junção interna, mas estou tendo problemas para construí-la. Posso extrair o nome científico da espécie (sciname) da subespécie sciname com uma função SubString(sciname, 1, localizar(' ', sciname, localizar(' ', sciname) + 1)) e tentar consultar com isso para encontrar o eID que eu quero, mas me dá um resultado nulo - provavelmente porque está olhando apenas um único registro por vez.
ID eletrônico | ecat | sciname |
---|---|---|
39 | espécies | Crypturellus noctivagus |
40 | espécies | Crypturellus atrocapillus |
17341 | subespécies | Crypturellus atrocapillus atrocapillus |
17342 | subespécies | Crypturellus atrocapillus garleppi |
41 | espécies | Crypturellus boucardi |
17343 | subespécies | Crypturellus boucardi boucardi |
17344 | subespécies | Crypturellus boucardi costaricensis |
42 | espécies | Crypturellus kerriae |
A saída que eu gostaria é o eID de cada subespécie e o eID de suas espécies relacionadas.
eID1 | eID2 |
---|---|
17341 | 40 |
17342 | 40 |
17343 | 41 |
17344 | 41 |
Eu tentei isso, mas não funcionou.
select e1.eid, e2.eid from species as e1
left join species as e2
on e1.sciname=e2.sciname
where e1.ecat="subspecies"
and e2.sciname=(select SubString(e1.sciname, 1, locate(' ', e1.sciname, locate(' ', e1.sciname) + 1)));
violino