簡體   English   中英

比較多行嵌套SQL語句返回的數據的1行

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

我有兩個表... EVENT(主鍵為EID)(包含所有常規事件數據)和SINGLE_EVENT(主鍵為SEID)(包含有關與特定事件ID相關的每個事件的信息,即事件的日期和時間)個別活動,場地位置等

總而言之,我想找到對於每個整體事件(EID)最快發生的“單個事件”-這應該為SINGLE_EVENTS表中的每個唯一EID返回一個事件,然后將整體EVENT信息綁定到返回的事件結果。

問題是,對於下面的當前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 * from SINGLE_EVENT t

select SEID from SINGLE_EVENT t

您實際上是在告訴它在整個表中搜索SEID,這在子查詢中是不允許的。

如果您指定子查詢正在尋找匹配的列,那應該可以解決您的問題。

您可以簡單地先加入您的聚合,然后再加入您的真實表:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM