-- ----------------------------------------------------------
-- 表的结构 `sql_archives`
--CREATE TABLE IF NOT EXISTS `sql_archives` (
  `id` int(6) unsigned NOT NULL auto_increment,
  `title` varchar(200) collate utf8_unicode_ci NOT NULL COMMENT '标题',
  `source` varchar(100) collate utf8_unicode_ci NOT NULL COMMENT '单位名称',
  `arcrank` tinyint(1) NOT NULL COMMENT '文章状态',
  `scores` float(6,2) NOT NULL,
  `pubdate` int(11) unsigned NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=10 ;--
-- 导出表中的数据 `sql_archives`
--INSERT INTO `sql_archives` (`id`, `title`, `source`, `arcrank`, `scores`, `pubdate`) VALUES
(1, '武汉一逃犯看完法治报道后到报社自首', 'AA县', 0, 0.00, 1293840000),
(2, '解放军首次在全军内对军事训练费用审计调查', 'BB县', 0, 0.00, 1293840000),
(3, '美媒称菲律宾新总统欲与中国在南沙展开合作', 'CC县', 0, 0.00, 1293840000),
(4, '食品工程博士称食疗不靠谱 如果有效纯属巧合', 'DD县', 0, 0.20, 1293840000),
(5, '谷歌"街景车"多年盗窃私人WIFI数据 曾一度否认', 'AA县', 1, 0.00, 1293840000),
(6, '空难中儿童是否更容易幸存:空难的求生三杀手', 'BB县', 0, 0.00, 1293840000),
(7, '中断对朝贸易 朝鲜威胁加强核力量', 'AA县', 1, 0.00, 1293840000),
(8, '黄光裕案涉案官员数量仍系谜团', 'BB县', 0, 2.00, 1293840000),
(9, '中国推行新国库系统 国家补贴直接进农民账户', 'dscs', 0, 0.00, 1293840000);-- ----------------------------------------------------------
-- 表的结构 `sql_bumeng`
--CREATE TABLE IF NOT EXISTS `sql_bumeng` (
  `id` int(6) unsigned NOT NULL auto_increment,
  `bmname` varchar(50) collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ;--
-- 导出表中的数据 `sql_bumeng`
--INSERT INTO `sql_bumeng` (`id`, `bmname`) VALUES
(1, 'AA县'),
(2, 'BB县'),
(3, 'CC县'),
(4, 'DD县');-- ----------------------------------------------------------
-- 表的结构 `sql_tongji`
--CREATE TABLE IF NOT EXISTS `sql_tongji` (
  `id` int(6) unsigned NOT NULL auto_increment,
  `bmname` varchar(100) collate utf8_unicode_ci NOT NULL,
  `sbnum` int(5) NOT NULL COMMENT '上报数',
  `cynum` int(5) NOT NULL COMMENT '采用数',
  `scores` float(8,2) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=131 ;--
-- 导出表中的数据 `sql_tongji`
--INSERT INTO `sql_tongji` (`id`, `bmname`, `sbnum`, `cynum`, `scores`) VALUES
(119, 'AA县', 0, 0, 0.00),
(118, 'BB县', 0, 0, 0.00),
(117, 'CC县', 5, 0, 0.00),
(116, 'DD县', 0, 0, 1.00);我现有的查询语句是:
SELECT arc.source, ifnull( tj.sbnum, 0 ) +  sum( arc.arcrank =0 ) AS sbnum, (
ifnull( tj.cynum, 0 ) + sum( arc.arcrank =1 )
) AS cynum, ifnull( tj.scores, 0 ) + sum( arc.scores ) AS scores
FROM `sql_bumeng` bm
LEFT JOIN `sql_archives` arc ON bm.bmname = arc.source
LEFT JOIN `sql_tongji` tj ON bm.bmname = tj.bmname
GROUP BY bm.bmname DESC
ORDER BY sbnum DESC
LIMIT 0 , 10得出的结果是:
source  sbnum   cynum  scores
CC县  6  0  0.00
BB县  3  0  2.00
AA县  1  2  0.00
DD县  1  0  1.20现我想加入日期查询条件
WHERE arc.pubdate >1293840000
因没有符合条件的结果,但我想即使不符合条件,也得出以下结果
source  sbnum   cynum  scores
AA县  0  0  0.00
BB县  0  0  0.00
CC县  5  0  0.00
DD县  0  0  0.20不知道语句该如何写,望赐教

解决方案 »

  1.   

    先做筛选,再joinselect 
    from table1 a left join (select * from table2 where ....) b on a.id=b.id这种格式处理一下就行了。
      

  2.   

    SELECT * FROM 
    (SELECT 'AA县' AS `bmname`,0 AS sbnum1
    UNION
    SELECT 'BB县' AS `bmname`,0 AS sbnum1
    UNION
    SELECT 'cc县' AS `bmname`,0 AS sbnum1
    UNION
    SELECT 'dd县' AS `bmname`,0 AS sbnum1
    ) d
    LEFT JOIN 
    (SELECT arc.source, IFNULL( tj.sbnum, 0 ) +  SUM( arc.arcrank =0 ) AS sbnum, (
    IFNULL( tj.cynum, 0 ) + SUM( arc.arcrank =1 )
    ) AS cynum, IFNULL( tj.scores, 0 ) + SUM( arc.scores ) AS scores
    FROM `sql_bumeng` bm
    LEFT JOIN `sql_archives` arc ON bm.bmname = arc.source
    LEFT JOIN `sql_tongji` tj ON bm.bmname = tj.bmname
    WHERE arc.pubdate >1293840000
    GROUP BY bm.bmname DESC
    ORDER BY sbnum DESC
    LIMIT 0 , 10) e
    ON d.`bmname`=e.source自行修改一下