1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

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

Discussão em 'Programação' iniciada por rubenmsoares, 3 de Agosto de 2012. (Respostas: 2; Visualizações: 814)

  1. rubenmsoares

    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 [email protected] AND [email protected] AND [email protected] "


    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?
     
  2. Thorax

    Thorax Power Member

    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 [email protected]

    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: 3 de Agosto de 2012
  3. rubenmsoares

    rubenmsoares Power Member

    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.
     

Partilhar esta Página