首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL合并了两个查询结果

SQL合并了两个查询结果
EN

Stack Overflow用户
提问于 2017-08-03 12:52:21
回答 2查看 144关注 0票数 1

我不能使用Union,因为它不是我想要的结果,也不能使用join,因为我没有任何公共列。我尝试过许多不同的SQL查询结构,但是没有任何东西能按我的要求工作。

我需要帮助来实现我认为是一个非常简单的SQL查询。我现在要做的是

代码语言:javascript
复制
select a, b 
from (select top 4 a from element_type order by c) as Y, 
     (SELECT * FROM (VALUES (NULL), (1), (2), (3)) AS X(b)) as Z

第一个是表的一部分,第二个是手工创建的select,它给出了如下结果:

代码语言:javascript
复制
select a; --Give--> a,b,c,d   (1 column)
select b; --Give--> 1,2,3,4   (1 column)

我需要一个基于第一个给我的查询(第2列):

代码语言:javascript
复制
a,1
b,2
c,3
d,4

我该怎么做?工会,加入还是别的什么?或者我做不到。

我现在所能得到的就是:

代码语言:javascript
复制
a,1
a,2
a,3
a,4
b,1
b,2
...
EN

回答 2

Stack Overflow用户

发布于 2017-08-03 13:34:43

如果您想将两个表完全按照行出现的顺序连接在一起,那么我希望您的数据库支持分析(窗口)函数:

代码语言:javascript
复制
 SELECT * FROM
  (SELECT t.*, ROW_NUMBER() OVER(ORDER BY x) as rown FROM table1 t) t1
  INNER JOIN
  (SELECT t.*, ROW_NUMBER() OVER(ORDER BY x) as rown FROM table2 t) t2
  ON t1.rown = t2.rown

从本质上说,我们发明了一些东西,通过对行编号来加入它们。如果您的一个表已经包含从1中递增的整数,则不需要在该表上使用ROW_NUMBER() OVER(),因为它已经有合适的数据可供连接;您只需在另一个表中创建一个假的增量器列,然后将其连接在一起即可。

实际上,即使它不支持分析,也有一些很糟糕的行编号方法,比如使用id < idCOUNT(*) .. GROUP BY id将表重新连接到它自己来对行进行编号。我讨厌这样做,但如果您的数据库不支持ROW_NUMBER,我将发布一个示例。:/

当然,请记住,RDBMS的名字中有R,因为相关的数据是.好吧..。相关的。如果你希望把“粉笔”表和“奶酪”表连在一起,即使两者完全不相关,那么你现在就会发现,为什么这是一项艰苦的工作!)

票数 0
EN

Stack Overflow用户

发布于 2017-08-03 13:42:46

尝试使用row_number。我创造了一些能帮你的东西。见下文:

代码语言:javascript
复制
declare @tableChar table(letter varchar)

insert into  @tableChar(letter)
select 'a';

insert into  @tableChar(letter)
select 'b';

insert into  @tableChar(letter)
select 'c';

insert into  @tableChar(letter)
select 'd';

select letter,ROW_NUMBER() over(order by letter )  from @tableChar
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45484772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档