我的SQL查询有什么问题?它不会获取数据

时间:2014-05-02 17:31:55

标签: mysql sql phpmyadmin

我基本上尝试从下面的数据库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)

4 个答案:

答案 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)

这会对你有帮助。