SQL更新使用Where子句连接; phpmyadmin

时间:2018-06-20 08:51:55

标签: mysql sql 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;

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

1 个答案:

答案 0 :(得分:0)

我找到了解决方法。

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