使用来自多个其他表

时间:2016-06-08 03:47:26

标签: mysql updates

我在更新和加入方面做得更好,但这个问题似乎让我感到困惑。我希望我在下面清楚地解释了它,原谅了字段/表格符号,但我试图保留它们,这样一旦我得到答案,我就可以轻松地应用于我的实际情况。我很乐意提供所需的任何澄清,我试图保持解释和简单,希望我成功。

我正在尝试更新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_ID100200和{来自300

的{1}}

然后我需要找到Table_X中的记录,其中Table_C等于任何找到的值和Table_J中记录1的B_ID X_ID和更新10在Table_J中B_ID中找到B_ID,在本例中为Table_X

TABLE_X:

100

最终更新后+------+------+ | B_ID | X_ID | +------+------+ | 100 | 10 | +------+------+ | 200 | 20 | +------+------+ | 300 | 30 | +------+------+ | 400 | 40 | +------+------+ | 500 | 50 | +------+------+ | 600 | 10 | +------+------+ | 700 | 20 | +------+------+ | 800 | 30 | +------+------+ | 900 | 10 | +------+------+ 会更新如下:

表J已更新:

Table_J

1 个答案:

答案 0 :(得分: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_J的正确B_ID更新Table_X
  • 它的内容是On
  • 来自X_ID的{​​{1}}(更新表)必须与Table_J
  • 中的X_ID相匹配
  • 而来自Table_X的{​​{1}}必须与来自B_ID(中间表)的Table_C匹配
  • 并且连接这两个条件后,B_ID的{​​{1}}必须与Table_X的{​​{1}}相匹配。

当然问题是Table_X中可能存在与X_ID相关联的多个B_ID,并且表C中可能存在多个与C相关联的B_ID。鉴于在Table_J中我知道C和X_ID,第一个连接允许我收集所有与C关联的B_ID然后最后一次连接允许我从Table_J记录中找到哪些B_ID具有相同的X_ID。

编辑:我意识到这可能令人困惑,我在这里制作了Sql Fiddle来演示:http://sqlfiddle.com/#!9/dd23c3/2。我只能选择Select,但概念是一样的。