【问题标题】:Update a table based on another table基于另一个表更新一个表
【发布时间】:2018-07-31 13:56:35
【问题描述】:

我正在使用带有 Lucee 和 SQL Server Management Studio 的开发环境。我有两张桌子:

  • 城市 - 列:城市、州、地区和邮编。
  • 信息 - 列:城市、州、邮编

Info 有 80,000 多个条目。我只想更新Cities 表中的zip 列。 22,000 个条目中的每一个都为空。如果 City 和 State 存在匹配值,请根据 Info 将该值分配给 Cities。我还没有弄清楚如何在没有某种搜索值的情况下像那样完成整个查询。

我已经尝试过类似下面的代码。它从Cities 输出10,从Info 在2 个转储中输出最后一个索引[9]。为什么不显示i 的每次迭代?为了完成整个查询,它可能是 30,000,但我仍然如何根据Info 中的值进行更新,并且即使Info 中有多个匹配值,也只能执行一次。另外,如果Info中不存在匹配值,如何不设置错误信息?

<cfquery name="list" datasource="source">
    SELECT TOP 10 *
    FROM cities
    ORDER BY CITY ASC
</cfquery>

<cfparam name="i" default="1">
<cfloop query="#list#" from="1" to="10" index="i">
  <cfoutput>#list.city[i]#</cfoutput>
  <cfoutput>#list.state[i]#</cfoutput>
</cfloop>
<cfquery name="master" datasource="source">
    SELECT TOP 10 *
    FROM WEBMASTERCOPY
    WHERE STATE = '#list.state[i]#' AND city = '#list.city[i]#'
</cfquery>

【问题讨论】:

  • 我阅读了您的信息并为您编写此查询更新城市 setities.zip = info.zip from info where info.city=cities.city and info.sate=cities.state and info.zip = 空
  • edit您的问题并添加格式化的SQL查询(这样更容易阅读)。语法不太正确。查看上面链接中的最后一个查询,它显示了 MySQL JOIN 需要如何位于 UPDATE 中(没有 FROM 子句)。更像这样的东西UPDATE cities c INNER JOIN info i ON i.state = c.state AND i.city = c.city SET c.zip = i.zip WHERE c.zip IS NULL
  • @EhsanPanahi 您的 SQL 语句正是我所需要的!!!起初 0 行更新和我拿走了 c.zip 是 NULL 并且它工作得很好!谢谢!!!!
  • @EhsanPanahi - 这是 SQL Server 语法。 MySQL 使用不同的语法stackoverflow.com/questions/15209414/…

标签: sql sql-server coldfusion cfml lucee


【解决方案1】:

结果是这样的:

 update Cities
   set Cities.ZIP = Info.ZIP from Info 
   where Cities.STATE = Info.STATE
 and 
Cities.CITY = Info.CITY 

【讨论】:

  • 如果该语法有效 - 你没有使用 MySQL!但它对 SQL Server 等有效。
  • @Ageax 没错,它是 Microsoft SQL Server Management Studio
  • 这有很大的不同 ;-) SQL 语法通常是特定于供应商的,因此请务必使用正确的 dbms 标记未来的问题以获得准确的答案。
【解决方案2】:

您不应该需要 ColdFusion,尽管您可以使用 cfquery。这是无论如何都可以工作的 MySQL:

UPDATE cities t1, WEBMASTERCOPY t2
SET t1.zip = t2.zip
WHERE t1.city = t2.city AND t1.state = t2.state AND t1.zip IS NULL

先备份=)

【讨论】:

  • 2018 年,不应该再推荐 ANSI-89 JOIN 了;-)
猜你喜欢
  • 1970-01-01
  • 2013-06-12
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
相关资源
最近更新 更多