Como trazer valores de duas tabelas mesmo que a terceira não tenha valores?

rubenmsoares

Power Member
Estou a selecionar 3 tabelas no botão de pesquisa


Tabela 1 sfid_nif


Tabela 2 cliente


Tabela 3 contagsm1


Nas tabelas sfid_nif e cliente existe sempre valor, pois quando insero um registo ele guarde o nif nas duas tabelas, contudo na tabela 3 (contagsm1) pode não existir valor, porque trata-se de um número de conta do nif.


O cliente(nif) só tem conta quando é criado uma, contudo o cliente pode já existir na base dados.


O problema está, ao executar o comando de cima e caso não exista o valor contagsm1.fidnif ele o resultadoé que o cliente não existe, quando na realidade existe, o problema está no fato de o mesmo ainda não ter conta criada e então não existe o nif na tabela de contagsm1

Tentei criar o código:


strSQL = "SELECT * FROM contagsm1.fidnif, sfid_nif.fidnif, cliente.nif
CASE
WHEN contagsm1.fidnif > 0 THEN
JOIN
sfid_nif.fidnif ON contagsm1.fidnif=sfid_nif.fidnif
LEFT JOIN cliente.nif ON contagsm1.fidnif=cliente.nif
ELSE
sfid_nif.fidnif ON cliente.nif=sfid_nif.fidnif
END AS contagsm1.fidnif
WHERE contagsm1.fidnif=@fidnif AND sfid_nif.fidnif=@fidnif AND fidsfid=@fidsfid "


O objéctivo é: Caso contagsm1.fidnif tenha valor superior a 0 então trás os valores das tabelas contagsm1.fidnif + sfid_nif.fidnif + cliente.nif


Caso não encontre trás so os valores das tabelas sfid_nif.fidnif + cliente.nif


Não funcionou :( :(


Alguém ajuda-me?
 
nao sei que linguagem é essa.. mas em todo o caso, isso em SQL é um left join.

Exemplo
SELECT sfid_nif.fidnif as A, cliente.nif as B ,contagsm1.fidnif as C
FROM sfid_nif
INNER JOIN cliente ON cliente.nif = sfid_nif.fidnif
LEFT JOIN contagsm1 ON contagsm1.fidnif = sfid_nif.fidnif
WHERE sfid_nif.fidnif=@fidnif

Isso devolve-te apenas uma tabela com 3 colunas. se a coluna C estiver vazia , então continua a mostrar a A e a B caso contrario mostra a A, B e C

Agora se queres que saia 3 tabelas mesmo, tens de gravar as tabela em DataSet ou algo parecido e depois na posição tabela 3 verificar se tens rowns > 0 se sim fazes mostrar todas as tabelas, senao apenas mostras as outras duas!

Agora, não consigo perceber o teu código a cima descrito!
 
Última edição:
nao sei que linguagem é essa.. mas em todo o caso, isso em SQL é um left join.

Exemplo
SELECT sfid_nif.fidnif as A, cliente.nif as B ,contagsm1.fidnif as C
FROM sfid_nif
INNER JOIN cliente ON cliente.nif = sfid_nif.fidnif
LEFT JOIN contagsm1 ON contagsm1.fidnif = sfid_nif.fidnif
WHERE sfid_nif.fidnif=@fidnif

Isso devolve-te apenas uma tabela com 3 colunas. se a coluna C estiver vazia , então continua a mostrar a A e a B caso contrario mostra a A, B e C

Agora se queres que saia 3 tabelas mesmo, tens de gravar as tabela em DataSet ou algo parecido e depois na posição tabela 3 verificar se tens rowns > 0 se sim fazes mostrar todas as tabelas, senao apenas mostras as outras duas!

Agora, não consigo perceber o teu código a cima descrito!

Obrigado pela resposta, mas

A questão é que contagsm1.fidnif as C pertence a outra tabela.

Este select quando executado é devolvido para uma ficha de clientes. Por isso o que eu quero é que seja devolvido a informação solicitada, mesmo que uma das tabelas não tenha a informação que devolvas as outras.
 
Back
Topo