2012-08-03 61 views
2

假設的下一行我有一個表結構,表答:SQL變化值,到另一個表

| id | 
|----| 
| 3 | 
| 4 | 
| 7 | 

表B:

| id | title | last_id | 
|----|-------|---------| 
| 1 | a | 1 | 
| 2 | b | 2 | 
| 3 | c | 3 | 

我想改變表'S Blast_id到下一個匹配的id表A

實施例:(參照表的乙第一行

電流last_id是,所以我需要轉發它的值從表A在下,更大ID

所以它會去:

1 -> 3 -> 4 -> 7

它還可以做用PHP,但也許有一種方法來保持它的SQL服務器英寸

在此先感謝。

注意:服務器運行MySQL。

+0

對於所有的行都一樣嗎?我的意思是,在過程結束時,表B上的所有last_id值都是7? – Yaroslav 2012-08-03 12:17:37

+0

是的,這是最終結果。 – Novak 2012-08-03 12:20:15

+0

您正在使用哪個數據庫服務器? MySQL的? Microsoft SQL Server?甲骨文?還有別的嗎? – Jocelyn 2012-08-03 12:22:38

回答

3

以前的答案是正確的,但是+1我認爲沒有必要,因爲只需要值7

UPDATE table_b 
    SET last_id = (SELECT MAX(id) FROM table_a) 

編輯:

現在從表-A更大的last_id上挑選的最小值table_b

UPDATE table_b 
    SET last_id = (SELECT MIN(id) FROM table_a WHERE id>last_id) 
+0

難道這不只是設置'last_id'到'7',而不經過3和4? – Novak 2012-08-03 12:22:32

+0

是的,這是它會做的。這不是你最終需要的嗎?或者,也許你想要的是打印所有的值? – Yaroslav 2012-08-03 12:23:30

+0

我需要一個查詢,每次你調用它時,對於從表B中選擇的行,它會將它的last_id增加到下一個更大的id。 – Novak 2012-08-03 12:24:49

1

以下片段是僞代碼。

  1. 搶下表-Aid

    SELECT id FROM table_a WHERE id > $currentLastId ORDER BY id ASC LIMIT 1 
    
  2. 如果沒有null,更新您的表-Blast_id列。

實施例:(參照表-B第一行)

SQL查詢將是:

SELECT id FROM table_a WHERE id > 1 ORDER BY id ASC LIMIT 1 

它將返回3

相關問題