SQL结合了两个查询结果

时间:2017-08-03 12:52:22

标签: sql sql-server join

我不能使用Union,因为它不是我想要的结果,而且我不能使用join,因为我没有任何常用列。我尝试过很多不同的SQL查询结构,没有任何工作可以按我的意思。

我需要帮助才能实现我认为非常简单的SQL查询。我现在正在做的是

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 a; --Give--> a,b,c,d   (1 column)
select b; --Give--> 1,2,3,4   (1 column)

我需要一个基于前两个的查询(2列):

a,1
b,2
c,3
d,4

我该怎么做? UNION,JOIN还是其他什么?或许我不能。

我现在能得到的只有:

a,1
a,2
a,3
a,4
b,1
b,2
...

3 个答案:

答案 0 :(得分:0)

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

 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(),因为它已经有合适的数据要加入;你只是在另一个表中发明了一个增量nubmers的假列,然后再加入

实际上,即使它不支持分析,也有很多方法可以进行行编号,例如使用id < idCOUNT(*) .. GROUP BY id将表连接回自身来对行进行编号。我讨厌这样做,但如果你的数据库不支持ROW_NUMBER我会发布一个例子......:/

当然,请记住,RDBMS在名称中有R为一个原因 - 相关数据是......嗯..相关。当数据不相关时,他们不能做得很好,所以如果你希望加入&#34;粉笔&#34;桌子到&#34;奶酪&#34;即使这两者完全不相关,你现在也要找出为什么它的努力工作! :)

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

您可以使用row_number()来实现此目的,

select a,row_number() over(order by a) as b from element_type;

由于您没有从其他表中获取第二部分,因此您不需要使用join。但是如果您在不同的表格上执行此操作,则可以使用 row_number()为表格和基础创建,您可以加入。

希望它会有所帮助。