从今天早上开始,我一直在问一个问题。查询将显示表a中的所有记录和表b中某列的计数,如果没有出现,则其中包含0值(这很正常),但当我加入表c以从表b中提取每个记录的相应描述时,所有0值记录都将被忽略!!
这是我的查询1(工作良好,无描述字段)(见查询1结果截图)
SELECT aa.awardcode, aa.year_grp, aa.awardqty, COUNT(aw.stud_code) as
stud_count from awardallocation AS aa
LEFT JOIN awardwinner as aw
ON aa.awardcode = aw.awardcode
AND aa.year_grp = aw.year_grp
AND aw.year = '$year'
AND aa.status = 1
AND aw.awardstatus = 1
GROUP BY aa.awardcode, aa.year_grp
这里是查询2(添加描述列时不显示任何零值记录)
SELECT aa.awardcode, ad.award_description, aa.year_grp, aa.awardqty,
COUNT(aw.stud_code) from awardallocation AS aa
LEFT JOIN awardwinner as aw
ON aa.awardcode = aw.awardcode
AND aa.year_grp = aw.year_grp
INNER JOIN award as ad
ON aa.awardcode = ad.awardcode
AND aw.year = 2017
AND aa.status = 1
AND aw.awardstatus = 1
GROUP BY aa.awardcode, aa.year_grp
我应该向query2添加什么条件来强制它显示零值?
注意:我正在使用mysql。列:awardcode在所有三个表中都存在,并且在奖励表中是唯一的。列:awardallocation和awardwinner表中显示年份grp。
谢谢您。
1条答案
按热度按时间8zzbczxx1#
你需要基本上改变你的工作环境
awardwinner
表向左连接ON
条件。这是因为,在某些情况下,在awardwinner
表,它们将作为null
. 但是你的where
条件将过滤掉他们,这就是为什么你没有得到的情况下,没有获奖者。现在,由于在不同的表上有多个联接,所以有可能出现重复的行。因此,您需要执行count(distinct…),以确保不会收到重复的计数。
此外,我还将select子句中所有必需的列(非聚合列)添加到groupby中。do read:在mysql中执行查询时,只与\u full \u group \u by相关的错误
执行以下查询:
另外:如果不想将这些where条件添加到连接中,可以添加
OR
的条件IS NULL
(这样所有的案子都能来)。您可以改为执行以下操作: