2016-09-30 114 views
2

我有兩個表。一個是本地的,另外一個是外國的。所以我想要做的是在使用存儲過程連接兩個表後給出行號。 首先,我想從兩個表中獲得相同數量的列,然後我想合併爲一個表並給出行號。我的查詢下面是 。如何使用sql存儲過程獲取行號

 

set @row_number=0; 

select (@row_number:[email protected]_number + 1) as number, 
(
select a.* 
from 
(select ID,title,last_name,first_name 
from local 
) 
a 
union all 
select b.* 
from 
(select ID,title ,last_name,first_name 
from foreign 
) 
b 
) 
; 

請問誰能告訴我它有什麼問題?

+0

它是MySQL或SQL Server。這些是完全不同的產品。你問哪一個? SQL Server具有類似'ROW_NUMBER()'的排名功能。 MySQL不。 MySQL沒有大多數其他數據庫提供的排名,窗口和分析功能 –

+0

爲什麼人們用MySQL和SQL Server標記標記問題,當他們明確表示他們只需要*其中一個答案*時, –

+0

[有了MySQL,我怎麼能生成一個包含表中記錄索引的列?](http://stackoverflow.com/questions/3126972/with-mysql-how-can-i-generate-a-列表中的記錄索引) –

回答

1

看起來您正在使用MySQL而不是SQL Server,並嘗試模擬行號,如in this duplicate question所示。這在使用ROW_NUMBER函數的SQL Server中很容易實現,如@ Prdp的答案所示。

MySQL雖然沒有在其他數據庫中找到的排名,分析或窗口函數。如鏈接問題所示,可以通過使用非標準SQL技巧以非常有限的方式模擬這些功能。

雖然這樣的技巧是非常有限的。 ROW_NUMBER的典型用途是對一個組內的記錄進行排名,例如按地區排名的前10名銷售員。使用@curRow := @curRow + 1這個技巧是不可能的。還有性能影響。這個技巧只有只有工作,如果行順序處理。

在問題的情況下,MySQL查詢可能會是這樣的:

SELECT l.ID, 
     l.title, 
     l.last_name, 
     l.first_name, 
     @curRow := @curRow + 1 AS row_number 
FROM ( select ID,title,last_name,first_name 
      from local 
      UNION ALL 
      select ID,title ,last_name,first_name 
      from foreign 
     ) l 
JOIN (SELECT @curRow := 0) r 

的這裏訣竅是,JOIN (SELECT @curRow := 0)爲0的初始值創建變量@curRow並返回其值。數據庫將採用查詢結果,對於每一行,它將增加變量並返回增加的值。這隻能在最後完成並強制對結果進行順序處理。

通過使用JOIN (SELECT @curRow :=0) r您可以避免在單獨的語句中創建變量。

+3

thriks很多@Panagiotis。你的回答幫助我解決了我的問題 – casper

2

使用ROW_NUMBER窗口功能SQL SERVER

SELECT Row_number() 
     OVER(
      ORDER BY (SELECT NULL))AS number,a.* 
FROM (SELECT ID, 
       title, 
       last_name, 
       first_name 
     FROM local 
     UNION ALL 
     SELECT ID, 
       title, 
       last_name, 
       first_name 
     FROM FOREIGN) a 

注:與行數生成你想要的順序替換列(SELECT NULL)。現在行號的產生是任意的

+1

行號在沒有實際排序的情況下是無用的,除非它僅用於非顯着標記(即,如果您實際上不關心數字)。每次執行查詢時,該值都會隨機更改,這可能是由於並行執行或執行計劃的更改。 –

+0

@PanagiotisKanavos - 我正在編輯 –

+3

謝謝@Prdp。如果我們使用mysql,有什麼變化? – casper

相關問題