Consulta MySQL: pesquisar por linha e retornar o nome da coluna baseado no conteúdo da linha
6 respostas
M
mimila
Olá,
Tenho uma tabela com Informações True/False (Varchar), no estilo:
ID C1 C2
1 True True
2 True False
3 False True
4 False False
Gostaria de pesquisar a tabela toda, porém linha por linha (como em um laço for) o nome das colunas cujo conteúdo naquela linha seja “True”, sem determinar em qual coluna. Seria mais ou menos assim: na linha atual, que colunas contém o valor “True”? Próxima linha.
Por exemplo, eu queria que no caso dessa tabela exemplo ele me retornasse:
C1 C2
C1
C2
Nos dois casos é repassado o nome da coluna, eu não queria dizer o nome da coluna (na hora da execução não vou saber o nome), queria dizer “na linha 1, onde tem ‘true’, me passe o nome das colunas correspondentes (porque não sei quais são!)”
V
victormagno
Não vejo uma forma de fazer isso numa query dinamica… melhor você pensar numa solução com uma function no banco. Você vai ter que buscar no seu schema as colunas da tablela que você quer, validar os tipos e verificar os valores.
G
Gustavo_Marques
Ou talvez se não forem muitos dados, pode trazer tudo e processar no java mesmo:
String sql = "select * from tabela";
List<String> colunasQuePossuemValorTrue = new ArrayList<String>();
ResultSet rs = con.prepareStatement(sql).executeQuery();
ResultSetMetaData meta = rs.getMetaData();
while(rs.next()){
for(int i = 0; i < meta.getColumnCount(); i++){
String valor = rs.getString(i);
String nomeDaColuna = meta.getColumnLabel(i);
if(valor.equals("true")){
//essa coluna contem valor true, guarda o nome dela
colunasQuePossuemValorTrue.add(nomeDaColuna);
}
}
}
rs.close();
//sua lista colunasQuePossuemValorTrue contem os nomes das colunas que possuem valor = 'true'
att
V
victormagno
Gustavo, sua solução foi muito boa… Não sei porque foquei somente em soluções sql, fiquei com isso na cabeça. Excelente!