2012-03-19 32 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 

不要以为这会影响你的索引,尽管如其他人所说。