2012-03-19 66 views
1

是否有可能加入不在表中的字段,而是從它派生?sql:如何在計算結果的字段上加入

例如,如果我有一個表將日曆日期映射到數據,另一個映射星期幾(0-6)到數據。如何將日曆日期表加入星期幾表中而不在前者中添加「星期幾」字段?

+1

你還沒有說過你正在使用哪種SQL - Mysql,Postgresql,oracle,SQL Server等。 – Bridge 2012-03-19 19:16:27

+0

它是mysql。雖然看到我對KM的回答的評論。 – 2012-03-19 21:25:28

回答

3

嘗試這樣:

select 
    a.one+a.two, b.three 
    from TableA   a 
     inner join TableB b on a.one+a.two=b.three 

只是把你計算的聯接,索引的使用是不可能的,但。你don'y說你的數據庫,但如果你有一些命令取日期的星期(),您可以加入對:

inner join TableB on weekday(a.EventDate)=b.Weekday 
+0

我使用MySQL與innodb。絕對希望能夠使用這些索引 - 我應該只在其他表中添加星期幾字段嗎? – 2012-03-19 21:24:56

+0

如果您只加入一個有7行的表格(對於一週中的某幾天),那麼索引將不會被使用。有了這麼幾行,只需掃描整個表格就可以更快更簡單。但是,如果您嘗試僅顯示特定一週中的行(如星期二),則會注意到缺少索引。 – 2012-03-20 12:42:10

1

如果您正在使用SQL Server,你可以使用DATEPART函數爲您提供一週中的哪一天(0-7)特定的日期。您應該能夠使用此功能,您的週數的一天加盟日期列:

select * from 
t1 inner join t2 on 
DATEPART(weekday,t1.dateColumnName) = t2.dayOfTheWeek 

一個疑難雜症,但 - 這可能會改變依賴於一週中的一天設置爲在SQL Server中的第一個設置。

0

當然,爲什麼不呢。

select foo.dayofweek, bar.date from foo 
join bar on datepart(dw, bar.date) = foo.dayofweek 

不要以爲這會影響你的索引,儘管如其他人所說。