Jump to content


Photo

Case Com Subquery


  • Faça o login para participar
5 replies to this topic

#1 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 16/07/2007, 17:29

Olá [=

Estou com a seguinte query abaixo.
Ela faz consulta na tabela de pedidos.
O problema é que o pedido pode ser feito na forma de cartão e boleto (tem tabelas distintas para isso).
Preciso pegar os status na tabela especifica, ou seja, se o cliente comprou com cartao, eu preciso ir na tabela de cartão e ver o status da transacao. Mesma coisa para o boleto ... compreenderam? :assobio:

Pensei então em usar um CASE, nada melhor né !? xD

Problema que não está funcionando meu subselect no case ;x

O case permite subquery?

SELECT
    p.im_id_pedido,
    p.im_id_cli_pedido,
    p.im_id_prod_pedido,
    p.im_id_forma_pedido,
    p.im_valor_pedido,
    p.im_qtde_pedido,
    p.im_status_pedido,
    p.im_dt_pedido,
    CASE p.im_id_forma_pedido
        WHEN '1' /* cartao visa */ THEN
            'cartao' /*(SELECT c.im_status_cartao_cliente FROM `im_cartao_cliente` c WHERE c.im_id_pedido_cartao_cliente = p.im_id_pedido)*/
        WHEN '2' /* boleto */ THEN
          'boleto' /* (SELECT b.im_status_boleto_cliente FROM `im_boleto_cliente` b WHERE b.im_id_pedido_boleto_cliente = p.im_id_pedido)*/
        END
    AS status_forma_pgto
FROM `im_pedido` p
INNER JOIN `im_clientes` c ON (p.im_id_cli_pedido = c.im_id_cli);
/*WHERE p.im_dt_pedido BETWEEN (1184554800) AND (1184641199); linha comentada para pegar mais resultados*/

Quando eu comendo a subquery me devolve 40 linhas (tudo que a tabela contem), se eu passar a subquery me traz 29 linhas <_<'

eu acho que o problema é quando ele não acha mais registros ele simplesmente dá um stop O.o
(a tabela cartao não tem resultados nela, ou seja vai retortornar NULL na subquery)

Na teoria era pra retornar as 40 linhas, as linhas que ele nao achasse na subquery era pra retornar NULL... mas não está acontecendo isso.

Alguma idéia?

(y)

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#2 filipevidotti

filipevidotti

    Novato no fórum

  • Usuários
  • 22 posts
  • Sexo:Não informado

Posted 16/07/2007, 21:35

Olá [=

Estou com a seguinte query abaixo.
Ela faz consulta na tabela de pedidos.
O problema é que o pedido pode ser feito na forma de cartão e boleto (tem tabelas distintas para isso).
Preciso pegar os status na tabela especifica, ou seja, se o cliente comprou com cartao, eu preciso ir na tabela de cartão e ver o status da transacao. Mesma coisa para o boleto ... compreenderam? :assobio:

Pensei então em usar um CASE, nada melhor né !? xD

Problema que não está funcionando meu subselect no case ;x

O case permite subquery?

SELECT
    p.im_id_pedido,
    p.im_id_cli_pedido,
    p.im_id_prod_pedido,
    p.im_id_forma_pedido,
    p.im_valor_pedido,
    p.im_qtde_pedido,
    p.im_status_pedido,
    p.im_dt_pedido,
    CASE p.im_id_forma_pedido
        WHEN '1' /* cartao visa */ THEN
            'cartao' /*(SELECT c.im_status_cartao_cliente FROM `im_cartao_cliente` c WHERE c.im_id_pedido_cartao_cliente = p.im_id_pedido)*/
        WHEN '2' /* boleto */ THEN
          'boleto' /* (SELECT b.im_status_boleto_cliente FROM `im_boleto_cliente` b WHERE b.im_id_pedido_boleto_cliente = p.im_id_pedido)*/
        END
    AS status_forma_pgto
FROM `im_pedido` p
INNER JOIN `im_clientes` c ON (p.im_id_cli_pedido = c.im_id_cli);
/*WHERE p.im_dt_pedido BETWEEN (1184554800) AND (1184641199); linha comentada para pegar mais resultados*/

Quando eu comendo a subquery me devolve 40 linhas (tudo que a tabela contem), se eu passar a subquery me traz 29 linhas <_<'

eu acho que o problema é quando ele não acha mais registros ele simplesmente dá um stop O.o
(a tabela cartao não tem resultados nela, ou seja vai retortornar NULL na subquery)

Na teoria era pra retornar as 40 linhas, as linhas que ele nao achasse na subquery era pra retornar NULL... mas não está acontecendo isso.

Alguma idéia?

(y)


Na hora de inserir você deve colocar os dois campos NULL como defult, e na hora do query use is not null

#3 HaroNism

HaroNism

    Super Veterano

  • Usuários
  • 15385 posts
  • Sexo:Masculino
  • Localidade:San Miguel de Tucuman

Posted 26/09/2017, 09:27

France Ethylex cialis buy online Kamagra Effet Keflex Generic Brand

#4 HaroNism

HaroNism

    Super Veterano

  • Usuários
  • 15385 posts
  • Sexo:Masculino
  • Localidade:San Miguel de Tucuman

Posted 09/10/2017, 10:49

Buy Propranolol Levitra Esercizi Di Kegel Dove Comprare Cialis Generico Forum viagra Acticin Best Website
Keflex For Acne Foros Cialis Generico Propecia Similares viagra Lovaza Propecia Minoxidil Pattern Baldness
Kamagra Gelatina Orale 25 Mg Comprar Viagra Sin Receta Medica Espana viagra Purchase Free Shipping Elocon Price Free Doctor Consultation Mastercard

#5 HaroNism

HaroNism

    Super Veterano

  • Usuários
  • 15385 posts
  • Sexo:Masculino
  • Localidade:San Miguel de Tucuman

Posted 04/11/2017, 16:51

Dove Comprare Cialis In Italia Pacific Care Pharmacy Prix Du Viagra 25 En Issy generic levitra professional Effects Of Mixing Keflex And Beer Viagra Lowest Prices Cialis Shop Gelsenkirchen
Compra Levitra Generico Legally Levaquin Medication Discount Store Amex Accepted Over The Counter Viagra buy levitra Provera Buy Now Priligy Ohne Rezept Bestellen Cheapeast Generic Dutasteride Visa Accepted C.O.D. Tyneside

#6 HaroNism

HaroNism

    Super Veterano

  • Usuários
  • 15385 posts
  • Sexo:Masculino
  • Localidade:San Miguel de Tucuman

Posted 30/11/2017, 04:51

Comprare Levitra Generico Italia viagra online pharmacy Sick Kitten Liquid Amoxicillin Kamagra Sildenafil 100 Mg Can I Buy Prozac Online
Amoxicillin Refridgerate Amoxicillin Dose Strep Throat buy cialis Acheter Viagra Au Maroc Zithromax Is It Penicillin Acheter Lioresal Baclofen




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq