我有两张桌子,几小时和几天,几小时存储一天专业的时间。 天,存储预约时间,
table_hours
id | begin | end | profesional
1 | 09:00 | 10:00 | 1
2 | 10:00 | 11:00 | 1
3 | 11:00 | 12:00 | 1
4 | 13:00 | 14:00 | 1
5 | 14:00 | 15:00 | 1
6 | 09:30 | 10:30 | 2
7 | 13:00 | 14:30 | 2
8 | 14:30 | 15:30 | 2
table_days
id | hour_id | day
1 | 1 |20151201
2 | 3 |20151201
3 | 6 |20151201
4 | 2 |20151205
5 | 7 |20151205
6 | 8 |20151205
我尝试了以下查询,但没有效果。
SELECT *, (SELECT day from days where hours.id = days.hours_id and day = '20151201') as 'day'
FROM hours
where profesional = 1
结果我希望得到专业的所有结果和比赛时的日期
table_result
id | begin | end | profesional | day
1 | 09:00 | 10:00 | 1 |20151201
2 | 10:00 | 11:00 | 1 |NULL
3 | 11:00 | 12:00 | 1 |20151201
4 | 13:00 | 14:00 | 1 |NULL
5 | 14:00 | 15:00 | 1 |NULL
答案 0 :(得分:3)
使用LEFT JOIN
获取第一个表中的所有行,并在没有匹配行的情况下从第二个表的列中返回NULL
。
SELECT h.*, d.day
FROM hours AS h
LEFT JOIN days AS d ON h.id = d.hours_id AND d.day = '20151201'
WHERE h.profesional = 1
答案 1 :(得分:1)
SELECT table_hours.id, table_hours.begin, table_hours.end, table_hours.professional, table_day.day
FROM table_day LEFT JOIN table_hours ON table_day.id=table_hours.id AND table_day.day= '20151201'
Where day= professional=1
答案 2 :(得分:1)
我想,你已经从其他答案中得到了解决方案。但我只想指出另一件事,你已经以错误的方式设置了数据库。不要将hour_id
保留在days
表中,而是将day_id
保留在hours
表中。它应该减少数据库中的行,并帮助您长期保存存储。所以它可以是这样的:
table_hours
id | day_id | begin | end | profesional
1 | 1 | 09:00 | 10:00 | 1
2 | 2 | 10:00 | 11:00 | 1
3 | 1 | 11:00 | 12:00 | 1
4 | 3 | 13:00 | 14:00 | 1
5 | 3 | 14:00 | 15:00 | 1
6 | 1 | 09:30 | 10:30 | 2
7 | 2 | 13:00 | 14:30 | 2
8 | 2 | 14:30 | 15:30 | 2
table_days
id | day
1 | 20151201
2 | 20151205
现在就像这样改变你的SQL
SELECT h.*, d.day
FROM hours AS h
LEFT JOIN days AS d ON h.day_id = d.id AND d.day = '20151201'
WHERE h.profesional = 1