2012-02-11 102 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 
相关问题