Mostrando postagens com marcador banco de dados. Mostrar todas as postagens
Mostrando postagens com marcador banco de dados. 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

CONSULTAR INFORMAÇÕES DO BANCO DE DADOS OU SCHEMA

PostgreSQL 8.0.0:

=> SELECT * FROM information_schema.tables
 Essa query busca todas informações sobre o banco a qual está conectado, ou seja, nome_db, nome_schema e nome_tabela.

=>SELECT * FROM information_schema.tables WHERE table_schema='nome_do_schema'
 Traz todas tabelas relacionadas ao schema informado nesta query.

=> SELECT current_database();

 current_database
------------------
 template1 
 
 
=> select schema_name from information_schema.schemata
 
 {retorna nome de todos schemas do banco que está conectado}
 
 
 => SELECT current_schema();

 current_schema
----------------
 public

=> SELECT current_schemas(TRUE);

   current_schemas
---------------------
 {pg_catalog,public}

=> SELECT CURRENT_USER AS usuario;

 usuario
----------
 postgres

=> SELECT inet_client_addr();

 inet_client_addr
------------------
 192.168.75.1

=> template1=# SELECT inet_client_port();

 inet_client_port
------------------
            16522

=> SELECT inet_server_addr();

 inet_server_addr
------------------
 192.168.75.128

=> SELECT inet_server_port();

 inet_server_port
------------------
             5432

=> SELECT SESSION_USER as usuario;

 usuario
----------
 postgres

=> SELECT USER as usuario;

 usuario
----------
 postgres

=> SELECT version() AS versao;

                                         versao
-----------------------------------------------------------------------------------------
 PostgreSQL 8.0.0 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 (mingw-special)

FORMATAR CAMPO DATA NO SQL E BUSCAR OS DADOS QUE ESTÃO OS DADOS QUE ESTÃO COM O ANO ATUAL

Fazendo consulta pegando o campo "dt_criacao" que contem datas completas(dia/mês/ano) com o ano atual. Utilizando o "to_char" ao campo "dt_criação", será retornado deste campo apenas o ano "YYYY". Utilizando o "to_char" ao campo "dt_criação", será retornado deste campo apenas o ano "YYYY". Se caso fosse querer retornar o dia utilizando o "to_char", então no lugar de "YYYY" seria o "DD" e para o mês o "MM". Se caso fosse querer retornar o dia utilizando o "to_char", então no lugar de "YYYY" seria o "DD" e para o mês o "MM".
EXEMPLO: select * from suaTabela where to_char(dt_criacao,'YYYY') = '" . date("Y") . "'";