MySql - 通过一些计算从 2 table 构建一个视图
MySql - build a view from 2 table with some calculations
我试着把我的预订系统放在一起,这部分留待理解。这可以用 CASE 语句完成吗?或者我应该怎么想?
我是初学者,喜欢 short/easy 代码。
我如何从这里得到它...
date_source_table
---id---+-----date------+---times---+---
1 2020-01-02 3
2 2020-01-03 2
3 2020-01-04 3
time_source_table
---id---+----time------
1 09:00
2 09:30
3 10:00
date_time_result_view
---id---+-----date------+---time---+---
1 2020-01-02 09:00
2 2020-01-02 09:30
3 2020-01-02 10:00
4 2020-01-03 09:00
5 2020-01-03 09:30
6 2020-01-04 09:00
7 2020-01-04 09:30
8 2020-01-04 10:00
此致
/斯万特
In MySQL 8+ 您可以使用row_number()
window函数对time_source_table
中的记录进行编号。然后,您可以在这些数字小于或等于 date_source_table.times
时将它们加入 date_source_table
。您还可以使用 row_number()
获取输出的“ID”,如果这些实际上应该只是从 1 到 n.
的数字
SELECT row_number() OVER (ORDER BY dso.date,
tso.time) id,
dso.date,
tso.time
FROM date_source_table dso
INNER JOIN (SELECT tsi.time,
row_number() OVER (ORDER BY tsi.time) rn
FROM time_source_table tsi) tso
ON tso.rn <= dso.times;
如果 time_source_table.id
保证按 time
的顺序排列并且没有间隙,您也可以使用它来加入。但是,如果该列只是一个 AUTO_INCREMENT
,则不会提供这些保证。这可能会突然产生不需要的结果。因此,如果必须,请谨慎使用它。
我试着把我的预订系统放在一起,这部分留待理解。这可以用 CASE 语句完成吗?或者我应该怎么想?
我是初学者,喜欢 short/easy 代码。
我如何从这里得到它...
date_source_table
---id---+-----date------+---times---+---
1 2020-01-02 3
2 2020-01-03 2
3 2020-01-04 3
time_source_table
---id---+----time------
1 09:00
2 09:30
3 10:00
date_time_result_view
---id---+-----date------+---time---+---
1 2020-01-02 09:00
2 2020-01-02 09:30
3 2020-01-02 10:00
4 2020-01-03 09:00
5 2020-01-03 09:30
6 2020-01-04 09:00
7 2020-01-04 09:30
8 2020-01-04 10:00
此致 /斯万特
In MySQL 8+ 您可以使用row_number()
window函数对time_source_table
中的记录进行编号。然后,您可以在这些数字小于或等于 date_source_table.times
时将它们加入 date_source_table
。您还可以使用 row_number()
获取输出的“ID”,如果这些实际上应该只是从 1 到 n.
SELECT row_number() OVER (ORDER BY dso.date,
tso.time) id,
dso.date,
tso.time
FROM date_source_table dso
INNER JOIN (SELECT tsi.time,
row_number() OVER (ORDER BY tsi.time) rn
FROM time_source_table tsi) tso
ON tso.rn <= dso.times;
如果 time_source_table.id
保证按 time
的顺序排列并且没有间隙,您也可以使用它来加入。但是,如果该列只是一个 AUTO_INCREMENT
,则不会提供这些保证。这可能会突然产生不需要的结果。因此,如果必须,请谨慎使用它。