我在更新和加入方面做得更好,但这个问题似乎让我感到困惑。我希望我在下面清楚地解释了它,原谅了字段/表格符号,但我试图保留它们,这样一旦我得到答案,我就可以轻松地应用于我的实际情况。我很乐意提供所需的任何澄清,我试图保持解释和简单,希望我成功。
我正在尝试更新Table_J B_ID字段,我要查找该记录中的C
和X_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
值100
,200
和{来自300
然后我需要找到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
答案 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,但概念是一样的。