Dúvidas em SQL

Delphi

04/09/2003

E ai pessoal!!
Muto obrigado por sanarem a maioria das minhas dúvidas.Este clube é legal mesmo!!!

Aqui vai outra..

Quero selecionar o conteúdo de duas tabelas mestre-detalhe via SQL.
A tabela Produtos tem os campos[codprod,nomeprod,codICMS,........]
A tabela ICMS tem os campos[codigoICMS,AliqICMS,......]
Então vem o código...

´select * from tabprodutos,tabicms
where codicms=codigoicms´

Funciona perfeitamente, porém se eu cadastrar um código de icms em branco o produto que foi cadastrado com o icms em branco não aparece no GRID qdo eu dou o ´select...´;

Como faço para funcionar o ´where codicms(*Campoembranco*)=codigoicms(*campoembranco*)

(*campoembranco*) é apenas para explicar, nao é comando.


Certo que serei auxíliado, desde já agradeço!!!
Valeu galera!


Igor

Igor

Curtidas 0

Respostas

Koplin

Koplin

04/09/2003

Tenta assim:

SELECT T.*, I.AliqICMS FROM tabprodutos T, tabaliqicms I LEFT JOIN I.codicms on I.codicms=T.codicms


GOSTEI 0
Lucas Borba

Lucas Borba

04/09/2003

E ai pessoal!!
Muto obrigado por sanarem a maioria das minhas dúvidas.Este clube é legal mesmo!!!

Aqui vai outra..

Quero selecionar o conteúdo de duas tabelas mestre-detalhe via SQL.
A tabela Produtos tem os campos[codprod,nomeprod,codICMS,........]
A tabela ICMS tem os campos[codigoICMS,AliqICMS,......]
Então vem o código...

´select * from tabprodutos,tabicms
where codicms=codigoicms´

Funciona perfeitamente, porém se eu cadastrar um código de icms em branco o produto que foi cadastrado com o icms em branco não aparece no GRID qdo eu dou o ´select...´;

Como faço para funcionar o ´where codicms(*Campoembranco*)=codigoicms(*campoembranco*)

(*campoembranco*) é apenas para explicar, nao é comando.


Certo que serei auxíliado, desde já agradeço!!!
Valeu galera!




Opa, tudo bem?

acredito que também funcione:

select * from tabprodutos, tabicms
where codicms=codigoicms or (select codicms from tabprodutos where codicms is null) = (select codigoICMS from tabicms where codigoICMS is null);
GOSTEI 0
Arthur Heinrich

Arthur Heinrich

04/09/2003

Comentando a sugestão do Koplin, eu nunca vi esta sintaxe, onde o join vem após a inclusão da tabela no from.

Para mim, só funcionava do jeito tradicional:

select p.*, ai.aliqicms
from
  tabprodutos p
    left outer join tabaliqicms ai
      on ai.codicms = p.codicms


Porém, o problema não é só a query. Se todo produto precisa ser acompanhado de uma alíquota de ICMS, o código não pode estar nulo e precisa ser um código válido.

Para que não aceite valores nulos:

alter table tabprodutos modify codicms not null;

Isto cria uma constraint de check, impedindo que dados sejam inseridos com a coluna "codicms" valendo null.

Para que o código do ICMS seja válido, ele precisa estar cadastrado na tabela tabaliqicms.

alter table tabprodutos
add constraint aliqicms_produtos_fk
foreign key (codicms)
references tabaliqicms (codicms);

Isto cria a constraint de foreign key. A cada registro inserido na tabela de produtos, o banco verifica se o codicms do produto está cadastrado na tabela de alíquotas. Caso não esteja, o banco aborta o insert com uma mensagem de violação da constraint.
GOSTEI 0
POSTAR