【问题标题】:Sql Syntax: Update All values in table based on a value in a different tableSql语法:根据不同表中的值更新表中的所有值
【发布时间】:2010-01-08 00:16:34
【问题描述】:

我有三个表,我想将特定类型的所有值更新为相同的值:

表1: id,值类型

表2: id, 值

表 3: id, fkValueTypeId, fkValueId

fkValueType 引用 table1 中的 ID。 fkValue 引用 Table2 中的 ID

我正在尝试将所有速度值设置为相同的值:

Table1:
0, speed
1, age
2, colour

Table2:
0, 10
1, 20
2, 30
3, 40
4, 18
5, 18
6, blue
7, black
8, orange
9, 33
10, 34
11, 35

Table3:
0, 0, 0      --Speed = 10
1, 0, 0      --Speed = 20
2, 0, 0      --Speed = 30
3, 0, 0      --Speed = 40
4, 1, 1      --Age = 18
5, 1, 1      --Age = 18
6, 2, 2      --Colour = Blue
7, 2, 2      --Colour = Black
8, 2, 2      --Colour = Orange
9, 0, 9      --Speed = 33
10, 0, 10    --Speed = 34
11, 0, 11    --Speed = 35

我想要做的是将表中所有 Speed 条目的 Speed 更新为“55”,以便 table2 看起来像这样:

Table2:
0, 55
1, 55
2, 55
3, 55
4, 18
5, 18
6, blue
7, black
8, orange
9, 55
10, 55
11, 55

希望这是有道理的。我不确定语法,可以使用循环来完成,但想知道是否有更好的方法(我确信有!)。

谢谢

【问题讨论】:

  • 抱歉跑题了,但这看起来像 EAV 模式。表格不应该像这个ID Color Speed age吗?稍后您可能会遇到严重的性能问题。
  • 它基于我上一个问题的答案,我想将测量表 PropertyType.Name 中的所有测量值更新为单个值:stackoverflow.com/questions/1762305/…

标签: sql sql-server tsql


【解决方案1】:

重写@hobodave 的答案:

UPDATE table2
SET Value = 55
FROM table2
JOIN table3 ON table3.fkValueId = table2.id
WHERE table3.fkValueTypeId = 0

【讨论】:

  • 我改变了我的语法以匹配这个并且仍然有“关键字'JOIN'附近的语法不正确”。在 Join 消除错误之前添加 FROM Table2 但我仍在尝试使其正常工作。
  • 好的,在 JOIN 之前添加“FROM table2”使这项工作。感谢您的帮助。
【解决方案2】:
UPDATE table2
SET table2.Value = 55
FROM table2
JOIN table3 ON table3.fkValueId = table2.id
WHERE table3.fkValueTypeId = 0

编辑:不知道 SQL Server 的语法缺陷 :)

【讨论】:

  • 这与我尝试的类似,但出现以下错误:关键字“JOIN”附近的语法不正确。
  • 在 JOIN 之前添加 "FROM table2" 使这项工作。感谢您的帮助。
  • 我使用标准 SQL 来实现它,不知道 sql server 的缺陷。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多