sql更新join with where子句;phpmyadmin公司

wz1wpwve  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(312)

我有一个关于sql连接的问题。我想更新一个在程序中运行的表,以便根据不同账户的价格发展(例如煤炭、皮革等的价格发展)进行价值计算。在目前的版本中,这些账户大约有3000个,有一个id、一个唯一的gp号码和一个每年的值。问题是,随着gp值的新发布,大约900个账户被删除。但是,程序必须能够用这些值进一步计算,因为计算是分配给id而不是gp值的。我想更新2015年、2016年和2017年的gp值……但是我不知道如何在不拍摄ID的情况下进行更新(没有更新并且有计算的值只会得到一般价格发展,但是这个更新可以忽略)
第一个表如下所示(tree:gps.gps\u 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'),

第二个表如下所示(从该表中,应在第一个表的201420152016和2017中输入值)。这棵树看起来像这样:gps.gps\u 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')

我现在想加入201420152016和2017年的表中,其中gps\u alt.nummer=gps\u 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;

希望有人能帮我,我不知道为什么这样不行。。。。

qojgxg4l

qojgxg4l1#

我找到了解决办法。

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

相关问题