Em 17/05/15, Matheus Saraiva<[email protected]> escreveu:
> Tenho as seguintes tabelas:
>
> QUARTO
> ------------
> numero_quarto varchar(5) PK NOT NULL,
> tipo_quarto integer FK NOT NULL,
> valor_quarto numeric(7,2) NOT NULL,
> capacidade_quarto integer NOT NILL
>
>
> TIPOSQUARTO
> --------------------
> id_tipoquarto SERIAL PK NOT NULL,
> descricao_tipoquarto varchar(30)
>
>
> FRIGOBARS
> ----------------
> quarto_frigobar FK PK NOT NULL,     --(FK >> QUARTOS)
> produto_frigobar FK PK NOT NULL,   --(FK >> PRODUTOS)
> quantidade_frigobar integer NOT NULL
>
>
>
> PRODUTO
> --------------
> id_produto SERIAL PK NOT NULL,
> descricao_produto varchar(50) NOT NULL,
> valor_produto numeric(7,2)
>
>
>
> Preciso fazer uma consulta que me traga:
>
> numero_quarto | descricao_tipoquarto | valor_quarto | capacidade_quarto
> | frigobar
>      1                      Luxo 100,00                3
>              'COM'
>      2                      Simples                         80,00
>            2                            'SEM'
>
> Minha dificuldade está na coluna "frigobar". Pela lógica, eu sei o que
> deve ser feito. Deve-se procurar na tabela frigobar se existe um
> registro para o número do quarto em questão.
> Se houver retornar a palavra 'COM', caso contrário retornar 'SEM'. Porém
> não sei como montar o SQL para esse caso.
> Existe o SELECT CASE, mas não encontrei um jeito de colocar tudo em uma
> só query.
> Eu consigo trazer uma parte com o trivial JOIN:
>
> SELECT
>      "QUARTOS"."numero_quarto",
>      "TIPOSQUARTO"."descricao_tipoquarto",
>      "QUARTOS"."valor_quarto",
>      "QUARTOS"."capacidade_quarto"
> FROM
>      "QUARTOS"
> JOIN
>      "TIPOSQUARTO" ON "QUARTOS"."tipo_quarto" =
> "TIPOSQUARTO"."id_tipoquarto";
>
> Mas não achei uma maneira de fazer o lance do frigobar.
>
> Eu também precisaria criar um select que me retornasse quantos quartos
> existem de cada tipo, também sei a lógica, (procurar na tabela "QUARTOS"
> quantos são do tipo 1, 2, 3, ....).
> Isso pode ser feito com COUNT() + WHERE, mas eu preciso uma query que
> retorne.
>
> descricao_tipoquarto | COUNT()
>      Luxo                                10
>      Simples                           20
>
> Grato!
> _______________________________________________


Faça um LEFT OUTER JOIN com a tabela FRIGOBARS e teste, no resultado,
se algum de seus campos é NULL, caso em que não tem frigobar.

Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a