2016-06-08 68 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

相关问题