Mostrando postagens com marcador bd. Mostrar todas as postagens
Mostrando postagens com marcador bd. Mostrar todas as postagens

CONCATENAR RESULTADOS DA SUBCONSULTA PARA NÃO DUPLICAR O RESULTADO DA CONSULTA PRINCIPAL SQL

Precisei fazer uma consulta sql onde teria que trazer no mesmo resultado informações da tabela relacionada USUARIO_PARENTESCO, que continha mais de um registro relacionado a uma só linha da tabela USUARIO. De forma que o resultado da consulta principal não viesse com o NOME_USUARIO duplicado devido a tabela relacionada USUARIO_PARENTESCO retornar mais de um registro relacionada através da coluna ID_USUARIO, ao invés de usar JOIN pra relacionar a consulta principal a outra tabela, criei a subconsulta que retorna todos NOME_PARENTESCO separados por vírgula relacionados ao NOME_USUARIO.

 

Segue o exemplo abaixo.

 

  • TABELAS: 

 

---------------------------------------------
|                    USUARIO                                 |
---------------------------------------------
ID_USUARIO | NOME_USUARIO 

            01           | Nayron 
            02           | Eliane
            03           | Emanuel     


 --------------------------------------------
|       USUARIO_PARENTESCO                 |
---------------------------------------------
ID  | ID_USUARIO | NOME_PARENTESCO   
01  |             01           | Marcos    
02  |             01           | Rosilene
03  |             02
           | Jorge
04  |             02           | Alice
05  |             03           | Saymon

06  |             03           | Ayumi

 

  • CONSULTA: 

 

SELECT DISTINCT u.NOME_USUARIO,
                (
                COALESCE(
                                        (SELECT array_to_string(
                                                ARRAY(
                                            SELECT up.NOME_PARENTESCO from USUARIO_PARENTESCO up WHERE up.ID_USUARIO = u.ID_USUARIO
                                                 ),
                                            ',')
                                         ),
                                    '')
                ) AS NOME_PARENTESCO
FROM USUARIO u

 

  • RESULTADO DA CONSULTA COM SUBCONSULTA:

 

NOME_USUARIO | NOME_PARENTESCO
Nayron                      | Marcos,Rosilene
Eliane                         | Jorge,Alice
Emanuel                    | Saymon,Ayumi


Se fosse usado o JOIN para relacionar a consulta ao invés da subconsulta, o retorno mostraria duplicidade no NOME_USUARIO, como mostra o resultado abaixo:

 

NOME_USUARIO | NOME_PARENTESCO
Nayron                       | Marcos
Nayron                       | Rosilene
Eliane                          | Jorge
Eliane                          | Alice
Emanuel                     | Saymon
Emanuel                     | Ayumi 

 

Se este Código do Dia lhe ajudou ou tiver qualquer dúvida ou encontrar algum erro deixe seu comentário.que irei responder assim que possível. 

Obrigado pela visita.

VALEEEU 😎👍

 

CONSULTAS PARA LISTAR TODAS TABELAS DE UM BANCO DE DADOS

Precisei listar todas tabelas do meu banco de dados criado no MySQL, e o exemplo abaixo me foi muito útil.

Oracle

Para listar todas as tabelas:
SELECT tablespace_name, table_name, owner FROM dba_tables;

Para listar todas as tabelas do usuário corrente:
SELECT tablespace_name, table_name, owner FROM user_tables;

Para listar todas as tabelas às quais o usuário tem acesso (sendo ele o owner (dono) ou não):
SELECT tablespace_name, table_name, owner FROM all_tables;

MySQL

Para listar todas as tabelas
SHOW TABLES [from <nome do database>];
ou
SELECT table_schema, table_name, table_type FROM information_schema.tables [WHERE table_schema = <filtro>];

DB2

Para listar todas as tabelas:
db2 list tables for all

Para listar todas as tabelas para um determinado schema (banco):
db2 list tables for schema <nome do schema>

SQL Server

Para listar todas as tabelas de todos os catálogos e schemas:
SELECT table_catalog, table_schema, table_name, table_typeFROM information_schema.tables  [WHERE table_catalog = <filtro>];

PostgreSQL (PG)

Para listar todas as tabelas:
\l ou \dt

Para listar, somente, as tables do banco/schema atual:
\dt