mysql - SQL Update Join with Where 子句;phpmyadmin
问题描述
我有一个关于 SQL 连接的问题。我想更新一个在程序中运行的表格,用于根据不同账户的价格发展(例如煤炭、皮革等的价格发展)进行价值计算。在当前版本中,这些是大约 3000 个帐户,具有一个 ID、一个唯一的 GP 编号和一个每年的值。问题在于,随着新版 GP 值的发布,大约 900 个帐户已被删除。但是,程序必须能够使用这些值进一步计算,因为计算是分配给 ID 而不是 GP 值。我想更新 2015 年、2016 年和 2017 年的 GP 值...但是我不知道如何在不拍摄 ID 的情况下执行此操作(未更新且有计算的值将简单地获得一般价格开发,但可以忽略此更新)
第一个表看起来像这样(树:gps.gps_alt):
INSERT INTO `gps_alt` (`id`, `Nummer`, `Beschreibung`, `Basisjahr`, `depricated`, `1949`, `1950`, `1951`, `1952`, `1953`, `1954`, `1955`, `1956`, `1957`, `1958`, `1959`, `1960`, `1961`, `1962`, `1963`, `1964`, `1965`, `1966`, `1967`, `1968`, `1969`, `1970`, `1971`, `1972`, `1973`, `1974`, `1975`, `1976`, `1977`, `1978`, `1979`, `1980`, `1981`, `1982`, `1983`, `1984`, `1985`, `1986`, `1987`, `1988`, `1989`, `1990`, `1991`, `1992`, `1993`, `1994`, `1995`, `1996`, `1997`, `1998`, `1999`, `2000`, `2001`, `2002`, `2003`, `2004`, `2005`, `2006`, `2007`, `2008`, `2009`, `2010`, `2011`, `2012`, `2013`, `2014`, `2015`, `2016`, `2017`, `2018`, `2019`, `created_at`, `updated_at`) VALUES
(1, 'GP09-05', 'Kohle', 0, 0, '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '100.0', '109.9', '113.0', '114.1', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
(2, 'GP09-06', 'Erdöl und Erdgas', 0, 0, '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '26.2', '27.8', '32.9', '31.0', '30.0', '45.5', '57.5', '52.0', '58.8', '55.0', '75.3', '96.4', '89.8', '113.9', '81.3', '100.0', '118.2', '142.2', '143.4', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
第二个表看起来像这样(从这个表中,值应该在第一个表的 2014、2015、2016 和 2017 中输入。树看起来像这样:gps.gps_neu):
INSERT INTO `gps_neu` (`Nummer`, `2014`, `2015`, `2016`,`2017`) VALUES
('GP09-052010', '113', '111.3', '110.7','108'),
('GP09-061010', '130.7', '79.5', '62', '81.1')
我现在想在 2014、2015、2016 和 2017 年加入 gps_alt.Nummer = gps_new.Nummer 的表格。我已经尝试了以下代码:
SELECT gps_alt.2014,
gps_alt.2015,
gps_alt.2016,
gps_alt.2017
FROM gps.gps_alt
JOIN LEFT gps_neu.2014,
gps_neu.2015,
gps_neu.2016,
gps_neu.2017
ON gps.gps_alt.Nummer = gps.gps_neu.Nummer;
Error message: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'LEFT gps_neu.2014, gps_neu.2015, gps_neu.2016, at line 6
update gps.gps_alt
set gps_alt.2014 = gps_neu.2014 ,
gps_alt.2015 = gps_neu.2015,
gps_alt.2016 = gps_neu.2016,
gps_alt.2017 = gps_neu.2017
FROM gps_alt
INNER JOIN gps_neu
ON gps_alt.Nummer = gps_neu.Nummer;
With this errormassage: update gps.gps_alt set gps_alt.2014 = gps_neu.2014 , gps_alt.2015 = gps_neu.2015, gps_alt.2016 = gps_neu.2016, gps_alt.2017 = gps_neu.2017 FROM gps_alt INNER JOIN gps_neu ON gps_alt.Nummer = gps_neu.Nummer;
希望有人可以帮助我,我不知道为什么这行不通....
解决方案
我找到了解决方案。
UPDATE gps_alt a
INNER JOIN gps_neu b
ON a.Nummer = b.Nummer
SET a.2014= b.2014
推荐阅读
- javascript - 如何在javascript中排序和获取最后一个值和索引
- laravel - 当我使用 laravel 按 created_at 日期搜索订单时,我想显示订单状态
- node.js - 如何在共享主机上托管 Gatsby+Node.js 项目?
- firefox - 动画定义路径的 d 属性在 Firefox 上不起作用
- angular - 无法在 Angular 中延迟加载功能模块
- azure-devops - 从 Spinnaker 触发 Azure DevOps 发布管道阶段
- php - 联系表格不断重定向到 php 页面
- bash - 如何在 curl 标头中连接时间戳?
- html - XHTML 元素“元”不允许作为子元素
- macos - Xamarin.Forms 支持的最低 MacOS 版本是多少?