簡體   English   中英

SQL合並兩個查詢結果

[英]SQL combine two query results

我不能使用聯合,因為這不是我想要的結果,我不能使用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,其給出的結果如下:

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
...

如果您希望僅按照行出現的順序將兩個表連接在一起,那么我希望您的數據庫支持分析(窗口)功能:

 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對表進行COUNT(*) .. GROUP BY id從而對行進行編號。 我討厭這樣做,但是如果您的數據庫不支持ROW_NUMBER,我將舉一個例子。

當然,請記住,RDBMS的名稱中帶有R是有原因的-相關數據很好。 當數據不相關時,它們的性能不佳,因此,即使兩個完全不相關,如果您希望將“ chalks”表與“ cheese”表連接在一起,那么您現在就知道為什么這樣做很困難! :)

嘗試使用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

您可以使用row_number()實現此目的,

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

由於您沒有從其他表中獲取第二部分,因此您無需使用join。 但是,如果要在其他表上執行此操作,則可以使用row_number()為表創建 ,並基於這些鍵創建 ,然后就可以聯接了。

希望它會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM