MYSQL UNION, выдающий неожиданные результаты и пропущенные столбцы - PullRequest
2 голосов
/ 11 февраля 2012

Я хочу объединить результаты из двух разных таблиц, единственное, что у них общего, это поле даты с именем date_mod

В приведенном ниже запросе показаны только два столбца из первого оператора выбора. Столбец profile_id не отображается.

Любая помощь по настройке, чтобы я мог получить 5 самых последних результатов из обеих таблиц, объединенных в порядке, в котором поле date_mod было бы здорово.

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

Ответы [ 5 ]

6 голосов
/ 11 февраля 2012

Отображается 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
1 голос
/ 11 февраля 2012

попробуйте это:

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 голосов
/ 11 февраля 2012

При выполнении 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
0 голосов
/ 11 февраля 2012

Вы должны оформить заказ на базе слияния:

(SELECT resume_id,  date_mod FROM resumes 
UNION ALL 
SELECT profile_id, date_mod FROM profiles ) ORDER BY date_mod LIMIT 5
0 голосов
/ 11 февраля 2012

Я полагаю, что ограничение 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

Это должно обеспечить то, что вы ищете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...