2010-05-30 17 views
2

我有兩個表reportsholidays在Mysql中的具體查詢

reports(username varchar(30),activity varchar(30),hours int(3),report_date date)

holidays(holiday_name varchar(30), holiday_date date)

select * from reports

+----------+-----------+---------+------------+ 
| username | activity | hours | date  | 
+----------+-----------+---------+------------+ 
| prasoon | testing | 3 | 2009-01-01 | 
| prasoon | coding | 4 | 2009-01-03 | 
| prasoon | designing| 2 | 2009-01-04 | 
| prasoon | coding | 4 | 2009-01-06 | 
+----------+-----------+---------+------------+ 

select * from holidays

+--------------+---------------+ 
| holiday_name | holiday_date | 
+--------------+---------------+ 
| Diwali  | 2009-01-02 | 
| Holi   | 2009-01-05 | 
+--------------+---------------+ 

有什麼辦法通過我可以輸出以下內容?

+-------------+-----------+---------+-------------------+ 
| date  | activity | hours | holiday_name  | 
+-------------+-----------+---------+-------------------+ 
| 2009-01-01 | testing | 3 |     | 
| 2009-01-02 |   |   |  Diwali  | 
| 2009-01-03 | coding | 4 |     | 
| 2009-01-04 | designing| 2 |     | 
| 2009-01-05 |   |   |  Holi   | 
| 2009-01-06 | coding | 4 |     | 
+-------------+-----------+---------+-------------------+ 
+0

兩個'日期'是否可以重疊? – kennytm 2010-05-30 13:38:53

+0

@KennyTM:NO .. – Radhe 2010-05-30 13:42:41

回答

4
SELECT date, 
     activity, 
     hours, 
     '' AS holiday_name 
FROM reports 
WHERE date >= '2008-12-1' 
     AND date < '2009-1-4' 
UNION 
(SELECT holiday_date, 
     '', 
     '', 
     holiday_name 
FROM holidays 
WHERE holiday_date >= '2008-12-1' 
     AND holiday_date < '2009-1-4') 
ORDER BY date 
+0

啊......我寫了一半......打敗了我!不錯的工作! – Senseful 2010-05-30 13:38:34

+0

@〜unutbu:我試圖檢查兩個具體日期之間的查詢,但失敗....是否有任何方式只是通過修改上述查詢? – Radhe 2010-05-30 13:44:56

+0

@Radhe,是的,但是你必須限制'reports.date'和'holidays.holiday_date'。我會編輯我的帖子以顯示我的意思。 – unutbu 2010-05-30 13:53:37

1
select * from 
    (select h.holdiday_date as date from holiday h 
     union 
     select r.date as date from reports r) dates 
left join holiday h1 on (h1.holiday_date = dates.date) 
left join reports r1 on (r1.date = dates.date) 
order by dates.date 

總之你聯合你有一個子查詢,比左邊的日期加入到兩個表。