Ir para conteúdo
Fórum Script Brasil
  • 0

Executar apenas uma das condições de where.


huerta

Pergunta

Pessoal, minha duvida é:

preciso fazer o comando trazer o trabalhador mesmo que não seja realizado a segunda condição de where,

ou seja, mostrar trabalhador onde a primeira é realizada e caso exista a segunda trazer a CS.DataConsulta.

COMANDO:

SELECT TB.*, CS.DataConsulta

FROM TB_trabalhador TB

LEFT JOIN PRONTUARIO PT ON (PT.CodTrabalhador=TB.cd_trab)

LEFT JOIN CONSULTA CS ON (CS.CodProntuario=PT.CodProntuario)

WHERE TB.cpf = '5588545454' AND

DATE_FORMAT(CS.DataConsulta, 'Y%-m%-d%') = CURRENT_DATE

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'huerta' !

Use OR ou XOR no lugar do AND.

No seu caso o OR é melhor, pois vai pegar a data e/ou o cpf.

Outro ponto sua busca em DATE_FORMAT(CS.DataConsulta, 'Y%-m%-d%') = CURRENT_DATE sempre causará table scan. Inverta a busca para CS.DataConsulta = DATE_FORMAT(CURRENT_DATE, <seu-formato-de-data>) e coloque esta busca como a primeira na cláusula WHERE.

Exemplo, imaginando que seu-formato-de-data seja dd/mm/aaaa:

SELECT TB.*, CS.DataConsulta
FROM TB_trabalhador TB
LEFT JOIN PRONTUARIO PT ON (PT.CodTrabalhador=TB.cd_trab)
LEFT JOIN CONSULTA CS ON (CS.CodProntuario=PT.CodProntuario)
WHERE CS.DataConsulta = DATE_FORMAT(CURRENT_DATE, 'd%/m%/Y%') OR TB.cpf = '5588545454'

assim sua query será otimizada.

Crie índice pela data para agilizar a busca se esta query for executada de forma constante.

Link para o comentário
Compartilhar em outros sites

  • 0

Caro colega...

gostrei muito da sua explicação, eu não devo ter me expressado corretamente,

o que eu presciso é:

consultar se existe o trabalhor onde ( nome like 'etc_etal' ou cpf = '009900909' ou rg = '989898' ) e se por acaso tiver alguma consulta realizada na data de hoje (current_date) que traga essa data.

ou seja, o resultado do trabalhador é o que procuro, a DataConsulta irá vir somente se existir na tabela CONSULTA e se for na data de hoje, sendo DataConsulta do tipo datetime.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'huerta' !

Acho que estou com raciocícnio curto, hoje. E ainda não entendi o que você quer. Seria isto?

SELECT TB.*, CS.DataConsulta
FROM TB_trabalhador TB
LEFT JOIN PRONTUARIO PT ON (PT.CodTrabalhador=TB.cd_trab)
LEFT JOIN CONSULTA CS ON (CS.CodProntuario=PT.CodProntuario)
WHERE TB.cpf = '5588545454' OR (TB.cpf = '5588545454' AND CS.DataConsulta = DATE_FORMAT(CURRENT_DATE, 'd%/m%/Y%'))

Vai trazer o cpf ou cpf acompanhado da data.

Link para o comentário
Compartilhar em outros sites

  • 0

É Denis, ta curto mesmo, haha...

O que presico é uma pesquisa do trabalhador. A DataConsulta viria somente se existir e se for de hoje.

Pois uso o comando para pesquisar os trabalhadores da tabela TB_trabalhador, dependendo das informações que forem enviadas para a consulta, que pode

ser: cpf, nome, rg , etc. Com isso mostro o resultado de trabalhadores encontrados, e ponto.

A minha dificuldada mora ai, como pesquisar tambem na tabela CONSULTA (que esta vinculada pela tabela PRONTUARIO) se este trabalhador possui na data de hoje uma consulta realizada.

Tentei ser mais explicativo, as vezes o erro esta em quem escreve e não em quem lê. Agradeço pela atenção.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...