树查询结果复杂

时间:2015-06-05 18:52:08

标签: sqlite

我有这个条件:

tb_product

    id  nome    
    "1" "prod1" "NULL"  "NULL"  "NULL"  "NULL"  "NULL"  "NULL"  "2015-06-05 06:48:12"
    "2" "prod2" "NULL"  "NULL"  "NULL"  "NULL"  "NULL"  "NULL"  "2015-06-05 06:48:17"
    "3" "prod3" "NULL"  "NULL"  "NULL"  "NULL"  "NULL"  "NULL"  "2015-06-05 06:48:21"

tb_cp

    id   nome
    "1" "cp1"   "NULL"  "NULL"  "NULL"  "NULL"  "NULL"  "2015-06-05 06:42:36"
    "2" "cp2"   "NULL"  "NULL"  "NULL"  "NULL"  "NULL"  "2015-06-05 06:42:40"

tb_store

    id   cp_store  location  nome  qta  data_in                data_out
    "1" "cp1"   "0.0"   "prod1" "1.0"   "2015-06-05 06:48:37"   "NULL"  "NULL"  "NULL"  "NULL"  "NULL"  "NULL"  "2015-06-05 06:48:41"
    "2" "cp1"   "4.0"   "prod1" "1.0"   "2015-06-05 06:49:02"   "NULL"  "NULL"  "NULL"  "NULL"  "NULL"  "NULL"  "2015-06-05 06:49:06"
    "3" "cp1"   "1.0"   "prod2" "1.0"   "2015-06-05 06:49:09"   "NULL"  "NULL"  "NULL"  "NULL"  "NULL"  "NULL"  "2015-06-05 06:49:13"
    "4" "cp1"   "12.0"  "prod1" "1.0"   "2015-06-05 07:05:05"   "NULL"  "NULL"  "NULL"  "NULL"  "NULL"  "NULL"  "2015-06-05 07:05:10"
    "5" "cp1"   "8.0"   "prod1" "1.0"   "2015-06-05 07:36:52"   "NULL"  "NULL"  "NULL"  "NULL"  "NULL"  "NULL"  "2015-06-05 07:36:57"
    "6" "cp2"   "0.0"   "prod1" "1.0"   "2015-06-05 09:28:06"   "NULL"  "NULL"  "NULL"  "NULL"  "NULL"  "NULL"  "2015-06-05 09:28:18"
    "7" "cp2"   "20.0"  "prod2" "1.0"   "2015-06-05 09:45:34"   "2015-06-05 09:46:18"   "NULL"  "NULL"  "NULL"  "NULL"  "NULL"  "2015-06-05 09:46:18"

我创建了这个查询:

SELECT DISTINCT nome, pezzi, cp_store FROM(
                SELECT nome,COALESCE(pezzi,0)as pezzi,cp_store FROM(
                SELECT p.nome, COUNT(s.nome) as pezzi,cp_store
                FROM tb_product as p LEFT JOIN tb_store as s
                ON   p.nome = s.nome
                WHERE s.data_out is null OR s.data_out = "" 
                GROUP BY p.nome
                union
                select nome,null as pezzi,null as cp_store from tb_product) where cp_store='cp1' GROUP BY nome )
                ORDER BY pezzi DESC

但结果是:

nome    pezzi    cp_store
"prod2" "1" "cp1"

如果我在查询中设置了cp2,请获取此结果:

nome    pezzi    cp_store
"prod1" "5" "cp2"

我看起来很错误,但我找不到它...我想获得,如果我设置cp1,这个结果:

 nome    pezzi    cp_store
"prod1" "4" "cp1"
"prod2" "1" "cp1"
"prod3" "0" 

1 个答案:

答案 0 :(得分:0)

试试这个:

SELECT p.nome, COUNT(s.id), s.cp_store
FROM `tb_product` p
LEFT JOIN (SELECT * FROM `tb_store` WHERE cp_store = 'cp1') s ON s.nome = p.nome
GROUP BY s.nome
ORDER BY p.id