【发布时间】:2021-06-18 22:48:12
【问题描述】:
我有几张桌子:
表 1:
| USER_NAME | USER_NUM |
|---|---|
| Billy Bob | Q1 |
| Billy Joe | Q2 |
| John Doe | Q3 |
表2:
| USER_NUM | USER_ID |
|---|---|
| Q1 | 1 |
| Q2 | 2 |
| Q3 | 3 |
表3:
| USER_ID | MATERIAL_NUMBER |
|---|---|
| 1 | M1 |
| 1 | M2 |
| 2 | M1 |
| 2 | M3 |
| 3 | M3 |
table4:
| MATERIAL_ID | MATERIAL_NUMBER |
|---|---|
| 111 | M1 |
| 112 | M2 |
| 113 | M3 |
这就是我希望 table5 的外观:
| OWNER_ID | MATERIAL_ID | USER_NUM | USER_NAME |
|---|---|---|---|
| 222 | 111 | Q1 | Billy Bob |
| 223 | 111 | Q2 | Billy Joe |
| 224 | 112 | Q1 | Billy Bob |
| 225 | 113 | Q2 | Billy Joe |
| 226 | 113 | Q3 | John Doe |
该表已经填写了OWNER_ID 和MATERIAL_ID,所以我只需要USER_NUM 和USER_NAME,除非从头开始重新填充它会更容易。
这是我尝试过的查询,但它根本不起作用(我得到 row is ambiguously defined 错误):
UPDATE table5 t5
SET t5.USER_NUM = (SELECT UPPER(t1.USER_NUM)
FROM table1 t1
INNER JOIN table2 t2
ON t1.USER_NUM = t2.USER_NUM
INNER JOIN table3 t3
ON t2.USER_ID = t3.USER_ID
INNER JOIN table4 t4
ON t3.MATERIAL_NUM = t4.MATERIAL_NUM
WHERE t4.MATERIAL_ID = t5.MATERIAL_ID);
一旦我在那里得到USER_NUM,用USER_NAME 更新表的查询应该很容易,但如果有人知道如何同时执行这两个操作,那也很好 =)
【问题讨论】:
-
您了解规范化并有意想要一个非规范化表吗?如果没有,您应该对规范化进行一些研究,并意识到将这些列放在第 5 个表中通常是一件坏事。如果是,那么你应该三思而后行,如果非规范化真的对你有帮助,那么它值得冒险。您也可以edit您的问题并详细说明实际问题以获得有关该主题的进一步建议。
-
我正在尝试将我想要的数据整合到 1 个表中,以便于使用。我不熟悉规范化。设置我的数据库的人在没有主键/外键或唯一值的情况下构建了表。我是一名实习生/大学生,只使用 SQL 3 个月。我周围没有任何其他开发人员寻求帮助,我只是被交给了别人的项目。他们在我来之前就已经走了,所以我什至不能问他们为什么要这么做。
-
好的,那么正如我所说,研究标准化的主题。 “易于使用”并不是非规范化的一个特别好的理由。为方便起见,您可以使用相应的连接创建一个视图,但您不应该在表格中实现它。
-
我正在尝试重新设计表格,使它们井井有条,并与我正在尝试开发的应用程序的目标相符合。
-
我会研究标准化。