2016-12-09 113 views
0

我有兩個表org_yearsyear_days結構如下:連接兩個表按日期範圍

org_years table

year_days table

我希望得到的所有日子的列表爲組織以及他們所屬的組織年份ID。

 org_years.id | for_date 
------------------------------------- 
     1    2016-01-01 
     1    2016-01-02 
     1    2016-01-03 
     1    2016-01-04 
     .. 
     .. 
     1    2016-12-31 
     2    2017-01-01 
     2    2017-01-02 

日期範圍不一定是1月1日至31日12月。這只是一個例子。這些可以是一年中任何時間的日期範圍。

此外,日期範圍不會重疊。此外,PHP應用程序邏輯將確保日期範圍內不會有空白。一天總是會在日期範圍內。

+0

您有記錄了一個年度爲公曆年度的第一天,較上年同期的最後一天結束的表。我傻眼了。 – Strawberry

+0

更新了我的描述:)這些也可以是自定義日期範圍 –

+0

他們不需要。但他們總是* – Strawberry

回答

1

做一個LEFT JOIN bewtween year_daysorg_years,檢查,看看到其年範圍for_date瀑布,爲每個記錄在year_days。請注意,我考慮到org_years日曆表中的某一天可能不在一個範圍內,在這種情況下,我會顯示-1作爲id

SELECT COALESCE(t2.id, -1) AS org_years_id, 
     t1.for_date 
FROM year_days t1 
LEFT JOIN org_years t2 
    ON t1.for_date BETWEEN t2.year_start_on AND t2.year_end_on 
+0

我將使用應用程序邏輯來確保一天總是要落在日期範圍內。另外,日期範圍不一定是1月1日至12月31日。這些可以是一年中任何時間的日期範圍。我將運行一些此查詢並現在檢查它:) –

0

請使用下面的連接條件

select t1.*,t2.* from Table1 t1 left join Table2 t2 ON 
DATE_FORMAT(t1.year_start_on,'Y') = t2.for_date