Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在联接|销售价值-类别中显示空值_Mysql_Sql - Fatal编程技术网

Mysql 在联接|销售价值-类别中显示空值

Mysql 在联接|销售价值-类别中显示空值,mysql,sql,Mysql,Sql,结果 SELECT cat_tbl.id_cat, cat_tbl.name, Sum(expences.price) AS PriceTotal FROM cat_tbl JOIN expences ON cat_tbl.id_kat= expences.category GROUP BY cat_tbl.id_cat, cat_tbl.name 问题是,我有4个以上的类别,我尝试了不同的联接,但它们不会显示类别1-7以及PriceTotal的

结果

SELECT
   cat_tbl.id_cat, 
   cat_tbl.name, 
   Sum(expences.price) AS PriceTotal
FROM cat_tbl
  JOIN  expences ON cat_tbl.id_kat= expences.category

GROUP BY
    cat_tbl.id_cat, 
    cat_tbl.name
问题是,我有4个以上的类别,我尝试了不同的联接,但它们不会显示类别1-7以及PriceTotal的空值

我真的不知道怎样才能做到这一点

+------+--------------+--------+
| name | PriceTotal   | id_cat |
+------+--------------+--------+
| Cat1 |      1031.40 |      1 |
| Cat2 |       200.88 |      2 |
| Cat4 |        46.44 |      4 |
| Cat5 |       223.76 |      5 |
+------+--------------+--------+

2个左连接选项:

+------+--------------+--------+
| name | PriceTotal   | id_cat |
+------+--------------+--------+
| Cat1 |      1031.40 |      1 |
| Cat2 |       200.88 |      2 |
| Cat3 |         0    |      3 |
| Cat4 |        46.44 |      4 |
| Cat5 |       223.76 |      5 |
| Cat6 |       0      |      6 |
| Cat7 |       0      |      7 |
+------+--------------+--------+
或:

选择ct.id\u cat、ct.name、Sum(不含价格)作为PriceTotal
来自cat_tbl ct
连接ct上的费用ex.id\u cat=ex.category
左连接费用ex2开启(ct.id\U cat=ex2.category和ex.category
使用
左连接
而不是简单的
连接
。我知道,我也尝试过,但结果没有改变。你确实需要使用
外部连接
,这不是信仰或其他问题。之后,您需要修复其他阻止您看到正确结果的错误。下面是一个例子,展示了简化的案例。下一次,请看:@草莓可以,但我认为它是非常通用的。第一个案例不应该是类似于
SUM(COALESCE(expenses.price,0))
?可爱的第二个答案;)@johnHC如果我想介绍WHERE语句,它必须在两个地方都出现吗?比如在哪里约会Between@KavvsonEmpcraft这取决于日期适用于哪个表。如果两者都适用,则将其添加到两者。否则,如果是Cat,则添加到整个查询的末尾,如果是Exp,则添加到子查询中。好的,谢谢,它将应用到expense请添加一些上下文,说明为什么您的代码应该解决此问题。
SELECT
   cat_tbl.id_cat, 
   cat_tbl.name, 
   Sum(expences.price) AS PriceTotal
FROM cat_tbl
  LEFT JOIN  expences 
     ON cat_tbl.id_kat= expences.category
GROUP BY
    cat_tbl.id_cat, 
    cat_tbl.name
select cat.id_cat, cat.name,
       coalesce(exp.tot, 0) as PriceTotal
from cat_tbl cat
left join
(
select x.category, sum(x.price) as tot
from expences x
group by x.category
) exp
on cat.id_cat = exp.category
   SELECT ct.id_cat, ct.name, Sum(ex.price) AS PriceTotal
   FROM cat_tbl ct
   JOIN  expences ex ON ct.id_cat= ex.category
   LEFT JOIN expences ex2 ON (ct.id_cat = ex2.category AND ex.category < ex2.category)
   .....
   WHERE ex2.category IS NULL