2016-06-08 67 views
0

我在更新和連接方面做得更好,但是這個問題似乎困擾着我。我希望我已經在下面清楚地解釋了這些,請原諒這些字段/表格符號,但我試圖保留它們,這樣一旦我有了答案,我就可以輕鬆應用到我的實際情況中。任何需要澄清的地方我都很樂意提供,我試圖保持解釋性和簡單性,希望我能成功。使用來自多個其他表格的值更新一個表

我試圖更新Table_J B_ID場我看這兩個向上和C價值X_ID該記錄:在其他表

+----+-------+------+------+ 
| ID | C  | X_ID | B_ID | 
+----+-------+------+------+ 
| 1 | Alpha | 10 |  | 
+----+-------+------+------+ 
| 2 | Alpha | 20 |  | 
+----+-------+------+------+ 
| 3 | Alpha | 30 |  | 
+----+-------+------+------+ 
| 4 | Beta | 50 |  | 
+----+-------+------+------+ 

Table_J。

首先,對於每一個我需要找到所有的B_ID值在Table_C在Table_J匹配C的記錄記載:

Table_C:

+-------+------+ 
| C  | B_ID | 
+-------+------+ 
| Alpha | 100 | 
+-------+------+ 
| Alpha | 200 | 
+-------+------+ 
| Alpha | 300 | 
+-------+------+ 
| Beta | 400 | 
+-------+------+ 
| Beta | 500 | 
+-------+------+ 

在記錄1的Table_J的情況下其中C = Alpha在這種情況下,我會有B_ID的值100,200300Table_C

然後我需要找到記錄TABLE_X其中B_ID等於任何那些被發現的值並記錄1 Table_J這是10和更新B_ID在Table_J的X_IDTable_X發現B_ID,在這種情況下100

TABLE_X:

+------+------+ 
| B_ID | X_ID | 
+------+------+ 
| 100 | 10 | 
+------+------+ 
| 200 | 20 | 
+------+------+ 
| 300 | 30 | 
+------+------+ 
| 400 | 40 | 
+------+------+ 
| 500 | 50 | 
+------+------+ 
| 600 | 10 | 
+------+------+ 
| 700 | 20 | 
+------+------+ 
| 800 | 30 | 
+------+------+ 
| 900 | 10 | 
+------+------+ 

最終更新後Table_J將更新,像這樣:

表J中更新:

+----+-------+------+------+ 
| ID | C  | X_ID | B_ID | 
+----+-------+------+------+ 
| 1 | Alpha | 10 | 100 | 
+----+-------+------+------+ 
| 2 | Alpha | 20 | 200 | 
+----+-------+------+------+ 
| 3 | Alpha | 30 | 300 | 
+----+-------+------+------+ 
| 4 | Beta | 50 | 50 | 
+----+-------+------+------+ 
+0

因爲表J中有一個_new_記錄,所以你並不嚴格執行'UPDATE'。相反,你正在做一系列複雜的更新和插入操作。請澄清額外的「Beta」記錄來自您的預期輸出。 –

+0

@TimBiegeleisen我的部分創建表的錯誤,通過編輯修復了問題,所以原始的Table_J具有相同的記錄數。絕對不是隻是更新的插入問題。 – user3649739

+0

您從「Table_J」到「Table_C」的連接條件沒有意義。一個內部連接會產生9條記錄,而不是3條。你需要重新思考你的邏輯。 –

回答

1
Update J as T1 
Inner Join C T2 Inner Join X T3 
On T3.X_ID=T1.X_ID 
and T3.B_ID=T2.B_ID 
and T1.C=T2.C 
Set T1.B_ID=T3.B_ID 

原來比我想象的要簡單;

  • 首先自然我需要加入所有三個表。
  • Set就是我最終尋找在這種情況下,從Table_X
  • 而且它的肉用正確B_ID更新Table_JOn
  • X_IDTable_J(更新表)必須匹配X_IDTable_X
  • 而從Table_CB_ID必須匹配從Table_XB_ID(中間表)
  • 並連接那兩個條件CTable_J必須匹配CTable_C

當然,問題是,有可以與X_IDs在TABLE_X關聯的多個B_IDs,並且可以存在於表C.與C相關的多個B_IDs在Table_J我知道C和X_ID第一個連接可以讓我收集與C關聯的所有B_ID,然後最後的連接允許我從Table_J記錄中找到哪些B_ID具有相同的X_ID。

編輯:我意識到這可能會讓人困惑,我在這裏做了Sql Fiddle來演示:http://sqlfiddle.com/#!9/dd23c3/2。我只能做到Select,但概念是一樣的。

+0

解釋查詢也 –

+1

@SomnathMuluk完成,與SqlFiddle以及。 – user3649739

相關問題