使用多个其他 table 的值更新一个 table

Updating one table using values from multiple other tables

我在更新和加入方面做得更好了,但这个问题似乎难倒了我。我希望我已经在下面解释清楚了,请原谅 field/table 符号,但我尽量保留它们,以便一旦我得到答案,我就可以轻松地应用于我的实际情况。我很乐意提供任何需要的澄清,我尽量保持解释性和简单性,希望我成功了。

我正在尝试更新 Table_J B_ID 字段,以便在该记录中查找 CX_ID 值:

Table_J:

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

在其他表格中。

首先,对于每条记录,我需要找到 Table_C 中与 Table_J 中的 C 匹配的记录的所有 B_ID 值:

Table_C:

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

对于 Table_J 中的记录 1,其中 C = Alpha 在这种情况下,我将有 B_ID 个值 100200300 来自 Table_C

然后我需要在 Table_X 中找到记录,其中 B_ID 等于任何找到的值以及 Table_J 中记录 1 的 X_ID 10 并使用 Table_X 中找到的 B_ID 更新 Table_J 中的 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 会像这样更新:

Table J 更新:

+----+-------+------+------+
| ID | C     | X_ID | B_ID |
+----+-------+------+------+
| 1  | Alpha | 10   | 100  |
+----+-------+------+------+
| 2  | Alpha | 20   | 200  |
+----+-------+------+------+
| 3  | Alpha | 30   | 300  |
+----+-------+------+------+
| 4  | Beta  | 50   | 50   |
+----+-------+------+------+
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

原来比我想象的要简单;

  • 首先我自然需要加入所有三个 table。
  • Set 是我最终要寻找的,在这种情况下,使用 Table_X
  • 中的正确 B_ID 更新 Table_J
  • 它的核心是 On
  • 来自 Table_JX_ID(更新 table)必须匹配来自 Table_X
  • X_ID
  • 而来自 Table_CB_ID 必须匹配来自 Table_XB_ID(中介 table)
  • 并且连接这两个条件 Table_J 中的 C 必须匹配 Table_C 中的 C

问题当然是 Table_X 中可以有多个 B_IDs 与 X_IDs 关联,并且 [=64] 中可以有多个 B_IDs 与 C 关联=] C. 鉴于在 Table_J 我知道 C 和 X_ID 第一个连接允许我收集所有与 C 关联的 B_IDs 然后最后一个连接允许我找到哪个B_IDs 与 Table_J 记录中的 X_ID 相同。

编辑:我意识到这可能会造成混淆,我在这里制作了 Sql Fiddle 来演示:http://sqlfiddle.com/#!9/dd23c3/2。我只能这样做 Select 但概念是一样的。