比较多行嵌套SQL语句返回的1行数据

Compare 1 row of returned data from multi-row nested SQL statement

我有两个 tables...EVENT(主键是 EID)(包含所有一般事件数据)和 SINGLE_EVENT(主键是 SEID)(包含有关每个事件的信息与特定事件 ID 相关的单个事件,即单个事件的日期和时间、场地的位置等。

总而言之,我想找到每个整体事件 (EID) 发生最快的 'single event' -- 这应该 return SINGLE_EVENT 中每个唯一 EID 的单个事件]S table 然后我想将整个事件信息绑定到 returned 结果。

问题是,使用下面的当前 MySQL 语句,我需要 select * 嵌套查询才能获得处理查询所需的所有信息,但我也不想 select 所有这些信息,因为我只需要来自该查询结果的 SEID(而不是整个 table)

这是我的查询(显然是在没有注释的情况下执行的):

<!-- non working outer query...
SELECT SINGLE_EVENT.SEID, EVENT.* FROM EVENT 
INNER JOIN SINGLE_EVENT ON SINGLE_EVENT.EID=EVENT.EID 
WHERE SINGLE_EVENT.SEID IN ( 
-->
<!-- working sub query...
select * from SINGLE_EVENT t
inner join (select eid, min(date) as MinDate from SINGLE_EVENT 
            group by eid) tm 
on t.eid=tm.eid and t.date=tm.MinDate and t.date>=sysdate()
-->
)

我是 SQL 的新手,不知道如何最好地从 table 中找到这些信息。我觉得我已经非常接近它的工作了,但由于子查询的多列 return 值,我不断收到消息 "Operand should contain 1 column(s)"。

感谢任何帮助。

在您的子查询中,更改:

select * from SINGLE_EVENT t

select SEID from SINGLE_EVENT t

您实际上是在告诉它在整个 table 中搜索 SEID,这在子查询中是不允许的。

如果您指定子查询要查找匹配的列,那应该可以解决您的问题。

您可以简单地先加入您的聚合,然后再加入您的真实 table:

select e.*, se.*
from event e
join 
(
  select eid, min(date) as date 
  from single_event
  where date >= sysdate()
  group by eid
) first_events on first_events.eid = e.eid
join single_event se on se.eid = first_events.eid and se.date = first_events.date;