簡體   English   中英

聯合查詢以合並3個表的結果

[英]Union query to combine results of 3 tables

我是編碼的新手,請耐心等待。

我正在嘗試合並3個表中的數據。 我設法找回了一些數據,但這不是我所需要的。 請在下面查看我的示例。

select oid, rrnhs, idnam, idfnam, dte1, ta  
  as 'access type' from person
left join 
  (select fk_oid, min(dte), dte1, ta
   from 
     ((Select fk_oid,min(accessdate) as dte, accessdate1 as dte1, accesstype as ta 
        from vascularpdaccess 
        where isnull(accesstype)=false group by fk_oid)
union
 (Select fk_oid, min(hpdate) as dte, hpdate as dte1, HPACCE as ta 
   from hdtreatment 
   where isnull(hptype)=false group by fk_oid)) as bla
 group by fk_oid) as access
 on person.oid=access.fk_oid
 where person.rrnhs in (1000010000, 2000020000, 3000030000)

我對聯合的理解是,列必須具有相同的數據類型,但是我有兩個問題。 第一個是accesstypehpacce合並到同一列中,如預期的那樣,但我不想實際看到hpacce數據(不知道這是否可能)。 其次,查詢的想法是在第一次約會給拉了回來一個病人的接入類型“日期hpdate

我不知道這是否對你們都有意義,但希望有人能提供幫助。.你們通常都很漂亮!

提前致謝!

米奇

所有查詢在SELECT語句中必須具有相同的列數。 看起來您的第一個查詢具有最大的列數,因此您將需要“填充”另一個以具有相同的列數。 您可以使用NULL as col來創建具有所有空值的列。

要回答這個問題(我認為),您是……對於UNIONUNION ALL設置操作,您是正確的:列數和返回的列的數據類型必須匹配。

但是可以在SELECT列表中將文字作為表達式返回。 例如,如果您不想返回HPACCE列的值, HPACCE可以將其替換為文字或NULL。 (如果該列是字符數據類型(我們不能從問題中提供的信息中看出),則可以使用(例如)文字空字符串'' AS ta代替HPACCE AS ta

                     SELECT fk_oid
                          , MIN(HPDATE)   AS dte
                          , hpdate        AS dte1
                          , NULL          AS ta
    -- -------------------- ^^^^
                       FROM hdtreatment

其他注意事項:

謂詞ISNULL(foo)=FALSE可以更簡單地表示為foo IS NOT NULL

UNION集運算符將刪除重復的行。 如果沒有必要,可以使用UNION ALL set運算符。

內聯視圖bla上的后續GROUP BY fk_oid操作將折疊行; 但它是不確定的,從價值哪一dte1ta將從。 (即,不能保證那些值將來自具有dte的“最小”值的行。)其他數據庫將使用此語句,沿着“ SELECT列表中未聚合,不在GROUP中的非聚合”行拋出異常/錯誤。通過”。 但這是MySQL特定於GROUP BY行為的擴展所允許的(沒有錯誤或警告)。 (我們可以使MySQL像其他數據庫一樣工作,並拋出錯誤,即為sql_mode指定一個包含ONLY_FULL_GROUP_BY(?)的值。

外部查詢的謂詞不會被下推到內聯視圖bla 對於每個fk_oid ,視圖bla都將fk_oid ,這在大型集合上可能是性能問題。

此外,限定所有列引用的內容將使該語句更易於閱讀。 而且,當將名為(例如) tadte1的列添加到person表時,這也可以防止語句將來引發“歧義列”錯誤。

暫無
暫無

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

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