我基本上尝试从下面的数据库m中获取接下来的三个未来事件,包括今天我的查询,并且它说派生表必须有一个别名,我对此有新的想法...是修复?
select * from events where event_start_date in
(select event_start_date from
(select distinct event_start_date from events
where event_start_date >= '2014-05-02' order by event_start_date)
WHERE rownum <= 3)
答案 0 :(得分:1)
假设您有一个名为rownum
的列:
select * from events where event_start_date in
(select distinct event_start_date
from events
where event_start_date >= '2014-05-02' AND rownum <= 3
order by event_start_date) T
修改强>
如果您尝试使用rownum
之类的内容,可以使用LIMIT
:
select * from events where event_start_date in
(select distinct event_start_date
from events
where event_start_date >= '2014-05-02'
order by event_start_date
LIMIT 3) T
答案 1 :(得分:1)
&#34;派生表必须有别名&#34;
该错误意味着当您在FROM
子句中使用子查询时,它被称为派生表,您必须为此声明别名。
这是一个更简单的查询形式:
SELECT events.* FROM events
JOIN (SELECT DISTINCT event_start_date FROM events
WHERE event_start_date >= '2014-05-02'
ORDER BY event_start_date LIMIT 3) AS d USING (event_start_date)
我为派生表提供了一个别名,您可以看到AS d
。你选择什么作为别名并不重要,它只需要有一个。
&#34;未知栏&#39; rownum&#39;在&#39; where子句&#39;&#34;
ROWNUM
是一个特定于Oracle的功能,它自动为每个结果集提供一个虚构列,其整数对应于该结果集的行号。但这不是标准的SQL,MySQL也不支持它。
因此,我删除了对隐式ROWNUM
列的引用,并将其替换为LIMIT
子句。
答案 2 :(得分:0)
您可以通过JOIN来完成此操作,而不是总共3次查询。查看JOIN以了解如何在每个表中加入您希望加入的列。
答案 3 :(得分:0)
select * from events where event_start_date in
(select event_start_date from
(select distinct event_start_date,rownum from events
where event_start_date >= '2014-05-02' order by event_start_date) as t1
WHERE rownum <= 3)
这会对你有帮助。