首页 > 解决方案 > 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;

希望有人可以帮助我,我不知道为什么这行不通....

标签: mysqlsqlphpmyadmin

解决方案


我找到了解决方案。

UPDATE  gps_alt a
        INNER JOIN gps_neu b
            ON a.Nummer = b.Nummer
SET     a.2014= b.2014

推荐阅读