doujiongqin0687 2010-12-23 17:48
浏览 35
已采纳

如何使用join和multiple where条件?

i've a db with the following structure

My table structure is countries

'id', 'int(11)', '', 'PRI', '', 'auto_increment'
'name', 'varchar(80)', 'YES', '', '', ''

holidays

'id', 'int(11)', '', 'PRI', '', 'auto_increment'
'holiday', 'varchar(90)', 'YES', '', '', ''
'same_date', 'tinyint(1)', 'YES', '', '', ''
'religions', 'varchar(50)', '', '', '', ''
'season', 'enum('Winter','Spring','Summer','Autumn')', '', '', 'Winter', ''
'rate', 'int(2)', '', '', '0', ''

holiday_countries

'id', 'int(11)', '', 'PRI', '', 'auto_increment'
'holiday_id', 'int(11)', '', '', '0', ''
'country_id', 'int(11)', '', '', '0', ''
'link', 'varchar(40)', '', '', '', ''

holiday_dates

'holiday_id', 'int(11)', 'YES', 'MUL', '', '' //  this refers to the holiday_id from holiday_countries table
'year', 'varchar(4)', 'YES', '', '', ''
'date', 'date', '', '', '0000-00-00', ''

And i use the following query to get the holidays for a particular country and particular year

 select hd.holiday_id
         , h.same_date
         , h.holiday
         , hd.date 
      from holidays as h
      join holiday_countries as hc on hc.holiday_id = h.id 
      join holiday_dates as hd on hd.holiday_id = hc.id 
      join countries as c on hc.country_id = c.id 
     where c.name='india'
       and hd.year='2010'

The sample output will be like this ,

975, 1, 'Republic Day', '2010-01-26'
976, , 'India Independence Day', '2010-08-15'
977, 1, 'Gandhi Jayanti (Mahatma Gandhi birthday)', '2010-10-02'

But i need to list the dates for two more years, and the desired output would be like this ,

id  same_date      holiday                    2010           2011        2012
975    1        'Republic Day'            '2010-01-26'  '2011-02-29' '2012-03-26'
976    0        'India Independence Day'  '2010-08-15'  '2011-08-15' '2012-08-15'
977    1        'Gandhi Jayanti'          '2010-10-02'  '2011-10-02' '2012-10-02'

How can i query this?

  • 写回答

1条回答 默认 最新

  • duanbei1903 2010-12-23 17:59
    关注
    SELECT  h.same_date,
            h.holiday,
            hd2010.date,
            hd2011.date,
            hd2012.date
    FROM    countries c
    JOIN    holiday_countries hc
    ON      hc.country_id = c.id
    JOIN    holidays h
    ON      h.id = hc.holiday_id
    LEFT JOIN
            holiday_dates hd2010
    ON      hd2010.holiday_id = hc.holiday_id
            AND hd2010.year = '2010'
    LEFT JOIN
            holiday_dates hd2011
    ON      hd2011.holiday_id = hc.holiday_id
            AND hd2011.year = '2011'
    LEFT JOIN
            holiday_dates hd2012
    ON      hd2012.holiday_id = hc.holiday_id
            AND hd2012.year = '2012'
    WHERE   c.name = 'india'
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办