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

3

I have a select that returns some data from the database, but I need this select to return values only when in a group of values, there is 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 to return the selected values only if there were at least one "No" value between the columns personas.cod_cert_civ_pes / personas.num_rg_pes / personas.num_nis_pes / personas.num_cpf_pes / personas.num_cart_trab_pes / people.num_tit_eleit_pes.

    
asked by anonymous 08.06.2016 / 21:08

2 answers

0

You can add one more AND between () by 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 !='')
    
08.06.2016 / 21:59
3

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

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

See working on IDEONE .

Data:

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

Result:

id  campo1  campo2  campo3
 2  Não     Sim     Sim
 3  Sim     Sim     Não
 4  Sim     Não     Sim
    
08.06.2016 / 22:01