【问题标题】:Take one value that matches a certain parameter and copy it to multiple rows取一个与某个参数匹配的值并将其复制到多行
【发布时间】:2018-05-30 17:33:46
【问题描述】:

所以我的挑战是获取表 1 中的筹码数量和筹码单位,并将其复制到表 2 中的 Cookie 和甜甜圈的现有数量和单位中。我在下面有一个开始,但我仍然缺少如何仅填充“筹码”数据。

UPDATE [Table 2].[On Hand Units]
SET [Table 2].[On Hand Units]="kg"
WHERE (([Table 1].[Units]) LIKE "*kg") AND (([Table 2].[Store ID]) NOT LIKE "234" OR "456");

UPDATE [Table 2].[On Hand Amount]
SET [Table 2].[On Hand Amount]=[Table 1].[Quantity]
WHERE (([Table 1].[Units]) LIKE "*kg") AND (([Table 2].[Store ID]) NOT LIKE "234" OR "456");

【问题讨论】:

  • 理想情况下,应在需要时计算“现有”值,而不是保存。我很困惑 - 你说表 2 是“饼干和甜甜圈”但你想保存芯片数据。我不认为你的“或”标准会像你想的那样。您是否尝试过标准Table1.Name='Chips'?为什么看起来你只是在复制数据?

标签: sql ms-access


【解决方案1】:

尝试以下方法:

UPDATE B
SET B.[On Hand Amount] = A.Quantity, B.[On Hand Units] = A.Units
FROM [TABLE 1] A
JOIN [Table 2] B ON A.[Store ID] = B.[Store ID] AND A.Name = B.Name
WHERE B.[Store ID] NOT IN ('234', '456')

【讨论】:

  • SQL 语法在 MS Access 中不起作用,因为它在 UPDATEJOIN 之前不使用 FROM 子句@ 987654326@。访问方言在这方面遵循 MySQL。
  • 我不知道 OP 是否升级了他的 Access 应用程序以使用 SQL Server 后端...不是每个人都这样做吗?无论如何,这很容易解决。总体思路仍然有效。有关语法,请参见此处的第二个答案:stackoverflow.com/questions/12882212/…
  • 除非提及或标记,否则我不会做出这种假设。 Access 应用程序可以连接到任何已知的后端(SQL Server、Oracle、Postgres),但这些链接表仍必须遵守其 JET/ACE SQL 方言,除非使用直通查询。尽管如此,您的答案可以很容易地针对 Access 进行调整。
  • 也许这应该是一个追加查询?我想从表 1 中取出薯条的数量并将其复制到饼干和甜甜圈中。由于名称不同,因此 name=name 解决方案也不起作用。六月,是的,我正在为一个非常大的数据集复制数据。
猜你喜欢
  • 1970-01-01
  • 2016-12-07
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
  • 2022-10-23
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
相关资源
最近更新 更多