gpt4 book ai didi

mysql - 使用多个其他表中的值更新一个表

转载 作者:行者123 更新时间:2023-11-29 11:29:14 24 4
gpt4 key购买 nike

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

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

表_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 值:

表_C:

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

对于 Table_J 中的记录 1,其中 C = Alpha 在这种情况下,我的 B_ID 值为 100 200300 来自 Table_C

然后,我需要在 Table_X 中查找记录,其中 B_ID 等于任何找到的值,并且 Table_J 中记录 1 的 X_ID10 code> 并使用 Table_X 中找到的 B_ID 更新 Table_J 中的 B_ID,在本例中为 100

表_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 |
+----+-------+------+------+

最佳答案

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来自Table_J (更新表)必须匹配X_ID来自Table_X
  • B_ID来自Table_C必须匹配B_ID来自Table_X (中间表)
  • 并将这两个条件联系起来 C来自Table_J必须匹配C来自Table_C .

问题当然是,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 。我只能将其作为“选择”,但概念是相同的。

关于mysql - 使用多个其他表中的值更新一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37692885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com