Checks if in a value group there is a value x mysql

Asked

Viewed 187 times

3

I have a select that returns some data from the database, but I need this select to return the values only when in a group of values, there is the value x

SELECT pessoas.id AS ID,
pessoas.nom_pessoa AS nome,
pessoas.cod_sexo_pes AS sexo,
YEAR(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(pessoas.dta_nasc_pes))) AS idade,
CASE WHEN pessoas.cod_cert_civ_pes !='' THEN '--' ELSE 'Não' end AS RN,
CASE WHEN pessoas.num_rg_pes !='' THEN '--' ELSE 'Não' end AS RG,
CASE WHEN pessoas.num_nis_pes !='' THEN '--' ELSE 'Não' end AS NIS,
CASE WHEN pessoas.num_cpf_pes !='' THEN '--' ELSE 'Não' end AS CPF,
CASE WHEN pessoas.num_cart_trab_pes !='' THEN '--' ELSE 'Não' end AS CP,
CASE WHEN pessoas.num_tit_eleit_pes !='' THEN '--' ELSE 'Não' end AS Titulo,
familia_domicilio.nom_local_fam AS bairro
FROM pessoas
INNER JOIN familia_domicilio ON familia_domicilio.id = pessoas.cod_familia
WHERE
familia_domicilio.nom_local_fam = 'AGUAS ESPRAIADAS'
AND YEAR(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(pessoas.dta_nasc_pes))) BETWEEN     '1' AND '100';

In this case, I would like the select me to return the selected values, only if there was at least one "No" value between the people columns.cod_cert_civ_pes/ people.num_rg_pes /people.num_nis_pes / people.num_cpf_pes / people.num_cart_trab_pes / people..

  • 1

    Not just using the OR operator?

  • What part of the code would the OR use?

  • 1

    ...WHERE (people.num_nis_pes = 'No' OR people.num_cpf_pes='No' OR... and so on ....

  • It worked, thank you very much my dear

  • @user46464 if the AND of the above comment solved, it is the case of using IN to simplify

2 answers

3

To test if a value is between several, the operator IN:

SELECT * FROM tabela WHERE "Não" IN ( campo1, campo2, campo3 )

See working on IDEONE.

Dice:

(1, 'Sim', 'Sim', 'Sim'),
(2, 'Não', 'Sim', 'Sim'),
(3, 'Sim', 'Sim', 'Não'),
(4, 'Sim', 'Não', 'Sim')

Upshot:

id  campo1  campo2  campo3
 2  Não     Sim     Sim
 3  Sim     Sim     Não
 4  Sim     Não     Sim
  • 1

    I hadn’t thought of that logic ....

0


You can add one more AND between () its values separated by OR as follows.

SELECT pessoas.id AS ID,
pessoas.nom_pessoa AS nome,
pessoas.cod_sexo_pes AS sexo,
YEAR(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(pessoas.dta_nasc_pes))) AS idade,
CASE WHEN pessoas.cod_cert_civ_pes !='' THEN '--' ELSE 'Não' end AS RN,
CASE WHEN pessoas.num_rg_pes !='' THEN '--' ELSE 'Não' end AS RG,
CASE WHEN pessoas.num_nis_pes !='' THEN '--' ELSE 'Não' end AS NIS,
CASE WHEN pessoas.num_cpf_pes !='' THEN '--' ELSE 'Não' end AS CPF,
CASE WHEN pessoas.num_cart_trab_pes !='' THEN '--' ELSE 'Não' end AS CP,
CASE WHEN pessoas.num_tit_eleit_pes !='' THEN '--' ELSE 'Não' end AS Titulo,
familia_domicilio.nom_local_fam AS bairro
FROM pessoas
INNER JOIN familia_domicilio ON familia_domicilio.id = pessoas.cod_familia
WHERE
familia_domicilio.nom_local_fam = 'AGUAS ESPRAIADAS'
AND YEAR(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(pessoas.dta_nasc_pes))) BETWEEN     '1' AND '100'
and(pessoas.cod_cert_civ_pes !='' or pessoas.num_rg_pes !=''  or  pessoas.num_nis_pes !='' or pessoas.num_cpf_pes !=''
or  pessoas.num_cart_trab_pes !='' or pessoas.num_tit_eleit_pes !='')

Browser other questions tagged

You are not signed in. Login or sign up in order to post.