O QUE TEM DE ERRADO NESSE SELECT COM INNER JOIN?
Montei assim:
O erro
Se eu fizer apenas esse SELECT
funciona normalmente. Mas quando faço o JOIN pra pegar o nome do usuário, acontece o erro.
Eu quero fazer o SELECT de TMP.usuario validando seu nome, porque pode acontecer do usuário não estar mais cadastrado...
Por favor, vc pode me ajuda?
Vlw
SELECT PG.idpagamento, PG.valor, VE.data, TMP.usuario
FROM tblPagamento PG INNER JOIN (SELECT PG.idpagamento, VE.data, (SELECT nome FROM tblUsuario WHERE idusuario = PG.idusuario) AS usuario
FROM tblPagamento PG INNER JOIN tblVenda VE ON PG.idvenda = VE.idvenda) TMP ON PG.idpagamento = TMP.idpagamento
O erro
Citação:está sendo retornado quando faço o SELECT de[Microsoft][ODBC Microsoft Access Driver] Jet error -3030
Citação:TMP.usuario
Se eu fizer apenas esse SELECT
SELECT PG.idpagamento, VE.data, (SELECT nome FROM tblUsuario WHERE idusuario = PG.idusuario) AS usuario
FROM tblPagamento PG INNER JOIN tblVenda VE ON PG.idvenda = VE.idvenda
funciona normalmente. Mas quando faço o JOIN pra pegar o nome do usuário, acontece o erro.
Eu quero fazer o SELECT de TMP.usuario validando seu nome, porque pode acontecer do usuário não estar mais cadastrado...
SELECT PG.idpagamento, PG.valor, IIF(ISNULL(TMP.usuario) = FALSE, TMP.usuario, [ô]desconhecido[ô]) FROM tblPagamento PG
Por favor, vc pode me ajuda?
Vlw
O campo [Ô]usuario[Ô], deveria estar na tabela tblUsuario que tem o alias de [Ô]usuario[Ô]. O alias TMP se refere à tabela tblVenda. Então ao invés de [Ô]TMP.usuario[Ô], não deveria ser [Ô]usuario.usuario[Ô] na primeira linha onde você seleciona os campos?
O select que faço de [ô]nome[ô] em tblUsuario, e crio o alias usuario, é só um sub select para que em todos os pagamentos eu
fique sabendo qual usuário realizou. O alias TMP, criei na tabela virtual que gero selecionando os
códigos dos pagamentos com base só nas vendas que existir algum pagamento.
Agora não entendi como era pra ser [ô]usuario.usuario[ô]...
Coloquei o banco de teste anexado aqui, vamos ver se consigo explicar melhor o problema.
fique sabendo qual usuário realizou. O alias TMP, criei na tabela virtual que gero selecionando os
códigos dos pagamentos com base só nas vendas que existir algum pagamento.
Agora não entendi como era pra ser [ô]usuario.usuario[ô]...
Coloquei o banco de teste anexado aqui, vamos ver se consigo explicar melhor o problema.
é que [Ô]TMP.usuario[Ô], se refere ao campo de nome [Ô]usuario[Ô] na tabela tblVendas. Esse campo existe nessa tabela? Mas eu faria uma seleção diferente:
Acho que assim fica mais simples e mais clara.
SELECT PG.idpagamento, PG.valor, VE.data, TMP.usuario, (SELECT nome FROM tblUsuario WHERE idusuario = PG.idusuario) AS usuario
FROM tblPagamento PG, tblVenda TMP
WHERE PG.idvenda = VE.idvenda AND PG.idpagamento = TMP.idpagamento
Acho que assim fica mais simples e mais clara.
Seu select ficou com o mesmo desempenho do meu com [Ô]join[Ô], mas também não consegui fazer a validação do usuário
no select.
Eu quero aplicar um [Ô]filtro[Ô] para que me retorne apenas os registros que ainda existir usuários cadastrados, por isso
fiz o sub select do usuário e depois tento ver se ele é válido.
O sub select
o alias [Ô]usuario[Ô] pra ele.
O que pude perceber com seu select, é que se eu não converter o código do usuário para INT, a seleção
não é feita, já que eu pego o código no campo [Ô]data[Ô], que é uma string [Ô]data#código[Ô] na tabela [Ô]tblPagamento[Ô].
Como vou exibir o usuário como [ô]desconhecido[ô] se não fizer esse sub select? .. ou aplicar um [ô]WHERE ISNULL(TMP.usuario) = FALSE ?
no select.
Eu quero aplicar um [Ô]filtro[Ô] para que me retorne apenas os registros que ainda existir usuários cadastrados, por isso
fiz o sub select do usuário e depois tento ver se ele é válido.
O sub select
(SELECT nome FROM tblUsuario WHERE idusuario = PG.idusuario)
, crieio alias [Ô]usuario[Ô] pra ele.
O que pude perceber com seu select, é que se eu não converter o código do usuário para INT, a seleção
não é feita, já que eu pego o código no campo [Ô]data[Ô], que é uma string [Ô]data#código[Ô] na tabela [Ô]tblPagamento[Ô].
Como vou exibir o usuário como [ô]desconhecido[ô] se não fizer esse sub select? .. ou aplicar um [ô]WHERE ISNULL(TMP.usuario) = FALSE ?
Coloque a estrutura de suas tabelas aà e nos diga o que precisa. Talvez possamos lhe dar uma consulta mais enxuta.
Citação::
Coloque a estrutura de suas tabelas aà e nos diga o que precisa. Talvez possamos lhe dar uma consulta mais enxuta.
tblPagamento: idpagamento, idvenda, valor, cadastro (data#código do usuário que lançou)
tblUsuario: idusuario, nome, cadastro, removido
tblVenda: idvenda, idusuario, tipo, data
Amigo Jaba, na segunda resposta está anexado o BD teste com esse estrutura.
O problema está na exibição do nome do usuário de [ô]tblUsuario[ô], conforme o código registrado em [ô]cadastro[ô] da tabela [ô]tblPagamento[ô]
Vlw
Tópico encerrado , respostas não são mais permitidas