我有两个表... EVENT(主键是 EID)(包含所有常规事件数据)和 SINGLE_EVENT(主键是 SEID)(包含与特定事件 ID 相关的每个单独事件的信息,即日期和单项事件时间、地点等
总之,我想找到每个整体事件 (EID) 最快发生的“单个事件”——这应该为 SINGLE_EVENTS 表中的每个唯一 EID 返回单个事件 然后我想将整体事件信息绑定(bind)到返回的结果。
问题是,对于下面的当前 MySQL 语句,我需要为嵌套查询选择 * 以获得处理查询所需的所有信息,但我也不想选择所有这些信息,因为我只需要来自该查询结果(而不是整个表)的 SEID
这是我的查询(显然是在没有注释的情况下执行的):
<!-- 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 新手,不知道如何最好地从表中查找此信息。我觉得我已经非常接近它的工作了,但由于子查询的多列返回值,我不断收到消息“操作数应包含 1 列”。
感谢任何帮助。
最佳答案
您可以简单地先加入聚合,然后加入真实表:
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;
关于mysql - 比较多行嵌套SQL语句返回的1行数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33638822/