2012-02-11 187 views
2

我要合併兩個不同的表的結果,他們共有的唯一的事情就是叫date_modMYSQL UNION產生意想不到的結果和失蹤列

日期字段下面只查詢顯示了從第一選擇兩列聲明。 profile_id列未顯示。

關於如何調整它的任何幫助,以便我可以根據date_mod字段的順序將這兩個表中的5個最新結果組合在一起。

SELECT resume_id, date_mod FROM resumes ORDER BY date_mod 
UNION ALL 
SELECT profile_id, date_mod FROM profiles ORDER BY date_mod LIMIT 5 

回答

6

顯示了profile_id,但一列只有一個標籤 - 標籤來自第一個選擇。

SELECT resume_id as id, date_mod as date, 'resume' as type FROM resumes 
UNION ALL 
SELECT profile_id, date_mod, 'profile' FROM profiles 
ORDER BY date 
LIMIT 5 
+0

這工作完美。謝謝,有道理。 – jsuissa 2012-02-11 15:00:18

0

我相信限5是造成問題你應該換行查詢即

SELECT * FROM (SELECT resume_id,date_mod FROM resumes ORDER BY date_mod UNION ALL SELECT profile_id, date_mod FROM profiles ORDER BY date_mod) LIMIT 5 

這應該提供您正在尋找什麼

+0

感謝您的建議。我得到了一個錯誤,因爲ORDER BY,所以我嘗試了一個簡化:SELECT * FROM(SELECT resume_id,date_mod FROM恢復UNION ALL SELECT profile_id,date_mod從配置文件)。然而,這給了我一個'每張桌子都需要一個別名'的錯誤,隨時隨地玩一下。 – jsuissa 2012-02-11 14:53:58

0

您應該合併基礎應用順序:

(SELECT resume_id, date_mod FROM resumes 
UNION ALL 
SELECT profile_id, date_mod FROM profiles) ORDER BY date_mod LIMIT 5 
1

試試這個:

SELECT * 
FROM 
    (SELECT resume_id as `ID`, date_mod 
    FROM resumes 
     UNION 
    SELECT profile_id as `ID`, date_mod 
    FROM profiles) iResult 
ORDER BY iResult.date_mod 
LIMIT 5 
+0

'UNION'會觸發不必要的隱式排序,所以'UNION ALL'會更可取。否則,這就是我即將發佈的內容。 – 2012-02-11 15:02:00

0

當執行UNION,列必須是相同的「別名」列結果和數據類型有資格的。如果你想要排名前5的話,你實際上應該對兩組進行限制,以獲得雙方的最高5分。然後應用總體限制5,以便您不預先返回來自兩個單獨文件的所有記錄

select 
     Source, 
     SrcID, 
     Date_Mod 
    from 
     (SELECT 
       "R" as Source, 
       resume_id as SrcID, 
       date_mod 
      FROM 
       resumes 
      ORDER BY 
       date_mod 
      LIMIT 5 
     UNION ALL 
     SELECT 
       "P" as Source, 
       profile_id as SrcID, 
       date_mod 
      FROM 
       profiles 
      ORDER BY 
       date_mod 
      LIMIT 5) PreQuery 
    order by 
     Date_Mod 
    LIMIT 5 
相關問題