我有两个表,一个表保存代码类型,另一个表保存日历模板。 每个模板都有一个开始日期和一个结束日期(星期一-星期日)
代码类型表
ID - Code Type - Name
1 --------- 1111 -------Monday
2 --------- 1112 -------Tuesday
3 --------- 1113 -------Wednesday
4 --------- 1114 -------Thursday
5 --------- 1115 -------Friday
6 --------- 1116 -------Saturday
7 --------- 1117 -------Sunday
模板表
ID - Name - Startday - Endday
1 --- Work ----- 1111 -------1115
1 - Weekend - 1116 -------1117
现在,我想通过sql语句显示如下表:
ID - Name - Startday - Endday
1 -- Work ----- Monday ------- Friday
1 - Weekend - Saturday ----- Sunday
我试图通过使用联接来做到这一点,但是我只能联接代码类型,并且我要实现的表中的每一行都有2种代码类型,因此它不起作用。 我也尝试通过CASE语句来做到这一点,但我无法在开始日期和结束日期提出两种情况)
有人知道如何实现这一目标吗?
答案 0 :(得分:2)
您的“代码类型”表格式不正确。该答案假设codetype
实际上是唯一的,因此可以用于join
。
应该设置您的表,以便将startday
和endday
链接到id
列,而不是链接到codetype
列-大概id
是表的主键。
假设codetype
是唯一的,则只需要两个联接:
select t.id, t.name, cts.name as startdate, cte.name as endday
from template t join
codetype cts
on t.startday = cts.codetype join
codetype cte
on t.endday = cte.codetype;