V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jookr
V2EX  ›  问与答

求助一个 SQL 语句:多表查询用 GROUP BY 缺少数据怎么解决

  •  
  •   jookr · 2017-01-02 03:38:14 +08:00 · 3004 次点击
    这是一个创建于 2883 天前的主题,其中的信息可能已经有所发展或是发生改变。

    主表 ads_location

    
    CREATE TABLE IF NOT EXISTS `ads_location` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(50) NOT NULL,
      `flag` varchar(50) NOT NULL DEFAULT '',
      `display` tinyint(1) NOT NULL DEFAULT '1',
      `total` tinyint(3) NOT NULL DEFAULT '0',
      `rank` tinyint(3) NOT NULL DEFAULT '99',
      PRIMARY KEY (`id`),
      KEY `display` (`display`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
    
    INSERT INTO `ads_location` (`id`, `name`, `flag`, `display`, `total`, `rank`) VALUES
    (1, 'index1', 'i_big_img1', 1, 0, 99),
    (2, 'index2', 'i_big_img2', 1, 0, 99),
    (3, 'index4', 'i_big_img3', 1, 2, 99),
    (4, 'list1', 'l_big_img1', 1, 0, 99);
    
    

    关联表 ads_content

    
    CREATE TABLE IF NOT EXISTS `ads_content` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `lid` int(11) NOT NULL,
      `name` varchar(255) NOT NULL DEFAULT '',
      `href` varchar(255) NOT NULL,
      `title` varchar(50) NOT NULL,
      `src` varchar(255) NOT NULL,
      `alt` varchar(50) NOT NULL,
      `desc` varchar(255) NOT NULL DEFAULT '',
      `begin_time` int(11) NOT NULL,
      `end_time` int(11) NOT NULL,
      `rank` tinyint(3) NOT NULL DEFAULT '99',
      PRIMARY KEY (`id`),
      KEY `lid` (`lid`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
    
    
    
    INSERT INTO `ads_content` (`id`, `lid`, `name`, `href`, `title`, `src`, `alt`, `desc`, `begin_time`, `end_time`, `rank`) VALUES
    (1, 3, '1', '1', '1', '1', '1', '', 1483295605, 1483295629, 1),
    (3, 3, '2', '2', '2', '2', '2', '', 1483295633, 1514831633, 127);
    

    查询

    SELECT l . * , MIN( c.begin_time ) begin_time, MAX( c.end_time ) end_time FROM ads_location l, ads_content c WHERE l.id = c.lid GROUP BY l.id ORDER BY l.rank DESC LIMIT 100
    

    以上语句才能得出一条数据。

    我希望 ads_location 有几条数据,查询结果就显示几条,应该怎么写呢?

    先谢谢各位了 新年快乐!

    1 条回复    2017-01-02 06:46:33 +08:00
    skydiver
        1
    skydiver  
       2017-01-02 06:46:33 +08:00 via iPad
    你这样查询相当于 inner join ,第二个表里只有 lid3 这一条存在,自然结果就只有一条。

    改成 left join 第二个表就可以了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   958 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:29 · PVG 04:29 · LAX 12:29 · JFK 15:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.