Как использовать ключевое слово join для объединения двух таблиц на SQL Server - PullRequest
0 голосов
/ 20 января 2020

Я не знаю, как использовать ключевое слово join в следующей ситуации. У меня есть две таблицы, и мне нужно объединить их в одну таблицу. Это код

use DEV

select top 10 
    Casa_de_marcat, 
    Numar_bon, 
    Data_bon 
from antetBonuri 
where Casa_de_marcat=1
order by Data_bon desc

use DEV

select top 10 
    Total, 
    Data, 
    Ora, 
    Vinzator 
from bp
order by Data desc

это результаты из двух таблиц

Casa_de_marcat Numar_bon   Data_bon
-------------- ----------- -----------------------
1              NULL        2018-05-12 00:00:00.000
1              1           2018-04-13 00:00:00.000
1              NULL        2018-03-16 00:00:00.000
1              NULL        2018-03-16 00:00:00.000
1              1           2018-02-16 00:00:00.000
1              1           2018-02-05 00:00:00.000
1              NULL        2018-02-05 00:00:00.000
1              NULL        2018-02-05 00:00:00.000
1              10          2017-11-02 00:00:00.000
1              NULL        2017-09-29 00:00:00.000

(10 rows affected)

Total                  Data                    Ora    Vinzator
---------------------- ----------------------- ------ ----------
12                     2019-11-15 00:00:00.000 1150   naomi     
12                     2019-11-15 00:00:00.000 1150   naomi     
82                     2019-10-17 00:00:00.000 1035   MIHAI     
12                     2019-10-17 00:00:00.000 1038   MIHAI     
12                     2019-10-17 00:00:00.000 1043   MIHAI     
12                     2019-10-17 00:00:00.000 1044   MIHAI     
12                     2019-10-17 00:00:00.000 1044   MIHAI     
12                     2019-10-17 00:00:00.000 1053   MIHAI     
12                     2019-10-17 00:00:00.000 1105   MIHAI     
12                     2019-10-17 00:00:00.000 1108   MIHAI     

(10 rows affected)

окончательные результаты должны быть объединены все вышеперечисленные столбцы в одну таблицу, порядок не учитывается , И да, мой плохой, я использую SQL сервер

1 Ответ

0 голосов
/ 20 января 2020

A FULL JOIN технически делает то, что вы хотите:

select ab.*, bp.*
from (select top 10 Casa_de_marcat, Numar_bon, Data_bon 
      from antetBonuri 
      where Casa_de_marcat = 1
      order by Data_bon desc
     ) ab full join
     (select top 10 Total, Data, Ora,  Vinzator 
      from bp
      order by Data desc
     ) bp
     on 1 = 0;  -- never matches

Нет очевидных JOIN ключей.

Это дает 20 строк со всеми столбцами. В каждой строке один из наборов столбцов (для каждого подзапроса) будет иметь значение NULL.

Это, как представляется, то, что вы просите. Я не уверен, насколько это полезно. Или почему вы предпочитаете использовать JOIN вместо UNION ALL, чтобы получить это.

РЕДАКТИРОВАТЬ:

Мне также кажется, что вам может потребоваться 10 рядов рядом. Если это так, тогда используйте row_number():

select ab.Casa_de_marcat, ab.Numar_bon, ab.Data_bon,
       bp.Total, bp.Data, bp.Ora, bp.Vinzator
from (select top 10 Casa_de_marcat, Numar_bon, Data_bon,
             row_number() over (order by (select null)) as seqnum
      from antetBonuri 
      where Casa_de_marcat = 1
      order by Data_bon desc
     ) ab full join
     (select top 10 Total, Data, Ora,  Vinzator, 
             row_number() over (order by (select null)) as seqnum
      from bp
      order by Data desc
     ) bp
     on ab.seqnum = bp.seqnum;

. В результате получится 10 строк с результатами «бок о бок». Строки из двух таблиц расположены в произвольном порядке.

...