【问题标题】:How to use the join keyword to join two tables in SQL ServerSQL Server中如何使用join关键字连接两个表
【发布时间】:2020-01-20 09:49:07
【问题描述】:

我不知道在以下情况下如何使用 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 服务器

【问题讨论】:

  • 您确定您使用的是 MySQL 吗? (前 10 名看起来像 MS SQL Server 代码。)
  • 如何加入?向我们展示这两个结果以及组合结果。 (作为格式化文本,而不是图像。)
  • 如果可能的话,您能分享一下您的预期结果吗?

标签: sql sql-server join keyword


【解决方案1】:

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 行结果“并排”。两个表中的行是任意顺序的。

【讨论】:

    猜你喜欢
    • 2020-04-19
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多