比较两个表或查询和表

时间:2018-09-06 20:12:55

标签: mysql sqlite

我有一张这样的桌子:

cp_store  name    qty
"Cp1"   "pesto" "1.0"
"Cp1"   "jivara"    "1.0"
"Cp1"   "Nocciola"  "1.0"
"Cp1"   "Parfait"   "1.0"
"Cp1"   "Crema" "1.0"
"Cp1"   "Crema" "1.0"
"Cp1"   "Malaga"    "1.0"
"Cp1"   "Ricotta_Limone"    "1.0"
"Cp1"   "Ricotta_Limone"    "1.0"
"Cp1"   "Ricotta_Limone"    "1.0"
"Cp1"   "mango" "1.0"
"Cp1"   "Lampone"   "1.0"
"Cp1"   "Limone_zenzero"    "1.0"
"Cp1"   "Limone_zenzero"    "1.0"
"Cp1"   "Limone_zenzero"    "1.0"
"Cp1"   "Limone_zenzero"    "1.0"
"Cp1"   "Pistacchio"    "1.0"
"Cp1"   "Caramello_Salato"  "1.0"
"Cp1"   "albicocca" "1.0"
"Cp1"   "Pistacchio"    "1.0"
"Cp1"   "Pistacchio"    "1.0"
"Cp1"   "Pistacchio"    "1.0"
"Cp1"   "Cioccolato"    "1.0"
"Cp1"   "Cioccolato"    "1.0"
"Cp1"   "Cioccolato"    "1.0"
"Cp1"   "Bacio_Siculo"  "1.0"
"Cp1"   "Bacio_Siculo"  "1.0"
"Cp1"   "Bacio_Siculo"  "1.0"
"Cp1"   "Cioccolato_al_rum" "1.0"
"Cp1"   "Cioccolato"    "1.0"
"Cp1"   "Cioccolato"    "1.0"
"Cp1"   "Cioccolato"    "1.0"
"nice1" "Cioccolato"    "1.0"
"nice1" "Cioccolato"    "1.0"
"nice1" "Cioccolato"    "1.0"
"nice1" "Bacio_Siculo"  "1.0"
"nice1" "Bacio_Siculo"  "1.0"
"nice1" "Bacio_Siculo"  "1.0"
"nice1" "Cioccolato_al_rum" "1.0"
"nice1" "Cioccolato_al_rum" "1.0"

并且我使用此查询

SELECT cp_store, nome, SUM(CAST(qta AS DECIMAL(10, 1))) AS total 
FROM tb_store 
WHERE  data_out is null 
GROUP BY cp_store, nome 
ORDER BY cp_store, nome

获取此信息

cp_store  name    qty
 "Cp1"  "Cioccolato"    "6.0"
 "Cp1"  "Cioccolato_al_rum" "1.0"
 "Cp1"   "Bacio_Siculo"  "3.0"
 "nice1"  "Cioccolato_al_rum" "2.0"
 "nice1"  "Bacio_Siculo"  "3.0"
.
.
.

但我想将结果名称与此表进行比较:

id name        presence cp_store 
1 "Cioccolato"  "1" "All" 
2 "Bacio_Siculo"    "1" "All" 
3 "Ricotta_Limone"  "1" "All" 
4 "Cioccolato_al_rum"   "1" "All" 
5 "Pistacchio"  "1" "All" 
6 "Nocciola"    "1" "nice1" 
7 "Mascarpone"  "1" "Cp1"
8 "Limone"  "0" "Cp1"

。 。

,并且如果存在名称并且 cp_store 等于ALL,但在第一个查询的结果中未找到,则最终结果的数量为0 ,就像这样:

cp_store    name                 qty
 "Cp1"      "Cioccolato"        "6.0"
 "Cp1"      "Cioccolato_al_rum" "1.0"
 "Cp1"      "Bacio_Siculo"      "3.0"
 "nice1"    "Cioccolato_al_rum" "2.0"
 "nice1"    "Bacio_Siculo"      "3.0"
 "All"      "Pistacchio"        "0"
 "All"      "Limone"            "0"

怎么可能?

1 个答案:

答案 0 :(得分:1)

对子查询使用LEFT JOIN,如果找不到0,则使用qty作为默认值。

SELECT COALESCE(t2.cp_store, 'All') AS cp_store, t1.name, COALESCE(t2.total, 0) AS qty
FROM tb_products AS t1
LEFT JOIN (
    SELECT cp_store, nome, SUM(CAST(qta AS DECIMAL(10, 1))) AS total 
    FROM tb_store 
    WHERE  data_out is null 
    GROUP BY cp_store, nome 
    ORDER BY cp_store, nome) AS t2 ON t1.name = t2.nome