Как использовать порядок в союзе всех - PullRequest
0 голосов
/ 20 марта 2020

У меня есть 2 таблицы, и я использовал union all для объединения обеих таблиц. У меня есть столбец strCreatedOn для отметки времени. Теперь я не могу использовать в нем порядок по пунктам

select nVendorId,
        'bank'as change_column,   
        nRequestType as change_type,
        strCreatedOn as Timestamp,
        nItemState as status       
from vaamoz_admin.tblbankdetails
 where   nItemState = '1' AND nRequestType='4'

union all

select nVendorId,
        'kyc' as change_column, 
        nRequestType as change_type ,
        strCreatedOn as Timestamp,
          nItemState as status

 from vaamoz_admin.tblkycdetails
 where nItemState = '1' AND nRequestType='4'

Ответы [ 3 ]

1 голос
/ 20 марта 2020

MySQL ожидает скобки вокруг каждого запроса, а затем order by, как объяснено в документации :

Чтобы использовать предложение ORDER BY или LIMIT Чтобы отсортировать или ограничить весь результат UNION, заключите в скобки отдельные операторы SELECT и поместите ORDER BY или LIMIT после последнего.

Итак:

(
    select 
        nVendorId,
        'bank'as change_column,   
        nRequestType as change_type,
        strCreatedOn as Timestamp,
        nItemState as status       
    from vaamoz_admin.tblbankdetails
    where nItemState = 1 and nRequestType = 4
) union all (
    select 
        nVendorId,
        'kyc', 
        nRequestType,
        strCreatedOn,
        nItemState
    from vaamoz_admin.tblkycdetails
    where nItemState = 1 AND nRequestType = 4
 )
 order by Timestamp

Примечания:

  • нет необходимости повторять имена столбцов во втором запросе (имена, определенные в первом запросе, появляются в другом (-их) запросе)

  • nItemState и nRequestType выглядят как числа, поэтому они должны рассматриваться как таковые (я убрал одинарные кавычки вокруг чисел)

0 голосов
/ 20 марта 2020
 select t.* from 
(
select nVendorId,
        'bank'as change_column,   
        nRequestType as change_type,
        strCreatedOn as Timestamp,
        nItemState as status       
from vaamoz_admin.tblbankdetails
 where   nItemState = '1' AND nRequestType='4'

union all

select nVendorId,
        'kyc' as change_column, 
        nRequestType as change_type ,
        strCreatedOn as Timestamp,
          nItemState as status

 from vaamoz_admin.tblkycdetails
 where nItemState = '1' AND nRequestType='4'
) as t order by t.Timestamp
0 голосов
/ 20 марта 2020

В большинстве баз данных вы можете просто добавить order by:

select nVendorId, 'bank'as change_column, nRequestType as change_type,
       strCreatedOn as Timestamp, nItemState as status       
from vaamoz_admin.tblbankdetails
where nItemState = '1' AND nRequestType='4'
union all
select nVendorId, 'kyc' as change_column, nRequestType as change_type ,
       strCreatedOn as Timestamp, nItemState as status
from vaamoz_admin.tblkycdetails
where nItemState = '1' AND nRequestType='4'
order by Timestamp;

В некоторых вам нужен подзапрос:

select t.*
from ((select nVendorId, 'bank'as change_column, nRequestType as change_type,
             strCreatedOn as Timestamp, nItemState as status       
       from vaamoz_admin.tblbankdetails
       where nItemState = '1' AND nRequestType='4'
      ) union all
      (select nVendorId, 'kyc' as change_column, nRequestType as change_type ,
           strCreatedOn as Timestamp, nItemState as status
       from vaamoz_admin.tblkycdetails
       where nItemState = '1' AND nRequestType='4'
      )
     ) t
order by Timestamp;

Здесь is простой пример с использованием MySQL.

...