如何将子查询包含到内部联接中?
我有以下SQL:
SELECT
date_trunc(
'hour',
FROM_UNIXTIME(timefrom)
) AS HourFrom,
date_trunc(
'hour',
(FROM_UNIXTIME(timeto) + interval '45' minute)
) AS HourTo
FROM
reservation
ORDER BY
date_trunc(
'day',
FROM_UNIXTIME(timefrom)
)
这给了我这样的数据:
TimeFrom TimeTo
2015-08-04 11:00:00.000 2015-08-04 14:00:00.000
2015-08-04 18:00:00.000 2015-08-04 20:00:00.000
2015-08-04 21:00:00.000 2015-08-04 23:00:00.000
我想要一个数字表,并进行如下内部连接:
SELECT DATE_ADD(HOUR, i - 1, TimeFrom) AS TimeFrom,
DATE_ADD(HOUR, i, TimeFrom) AS TimeTo
FROM (SELECT 1 AS i UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8
UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12
UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15 UNION ALL SELECT 16
UNION ALL SELECT 17 UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL SELECT 20
UNION ALL SELECT 21 UNION ALL SELECT 22 UNION ALL SELECT 23 UNION ALL SELECT 24
) AS numbers
INNER JOIN mytable ON numbers.i <= DATE_DIFF(HOUR, TimeFrom, TimeTo)
ORDER BY TimeFrom
所以我可以得到这样的东西:
TimeFrom TimeTo
2015-08-04 11:00:00.000 2015-08-04 12:00:00.000
2015-08-04 12:00:00.000 2015-08-04 13:00:00.000
2015-08-04 13:00:00.000 2015-08-04 14:00:00.000
2015-08-04 18:00:00.000 2015-08-04 19:00:00.000
2015-08-04 19:00:00.000 2015-08-04 20:00:00.000
2015-08-04 21:00:00.000 2015-08-04 22:00:00.000
2015-08-04 22:00:00.000 2015-08-04 23:00:00.000
如何使用第一个查询的结果进行内部联接(用该查询结果替换mytable)?这可能吗?我一直找不到一种方法来插入我的查询,对其执行内部联接
我对SQL语法不是很有经验,尽管找了一整天也没能找到答案。
您想要做的是创建一个"派生表"。也就是说,一个派生自其他事物的表。大多数时候,这是一种观点。但是,使用一个典型的SELECT语句也可以完成同样的操作。语法如下:
SELECT dt.name
from (SELECT name from tableWithName) dt
其中"dt"是表的名称。在主选择中引用它时,必须使用派生表名作为前缀。"dt名称"
这里的第二个查询实际上已经正确设置了。但是AS这个词的语法不正确。它应该只是说
...SELECT 24
) numbers
开始SELECT中的所有部分都应该使用该表名作为前缀:
SELECT DATE_ADD(HOUR, i - 1, numbers.TimeFrom) AS TimeFrom