簡體   English   中英

SQL更新左連在一起,其中where子句

[英]SQL Update Left Join with Where Clause

對SQL連接有疑問。 我想更新一個程序中運行的表格,以便根據不同帳戶的價格走勢(例如煤炭,皮革等的價格走勢)進行價值計算。 在當前版本中,這些大約有3000個帳戶,每個帳戶具有ID,唯一的GP編號和每年的值。 問題在於,隨着新發行的GP值,已經刪除了大約900個帳戶。 但是,程序必須能夠使用這些值進一步計算,因為計算是分配給ID而不是GP值。 我想更新2015年,2016年和2017年的GP值...但是我不知道如何在不拍攝ID的情況下進行操作(未更新且經過計算的值只會得到一般價格開發,但可以忽略此更新)

因此,第一個表如下所示:

INSERT INTO `gps` (`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'),

依此類推(3000個數據集)

我要加入的第二張表看起來像這樣(數據庫看起來像這樣:“ gps_neu.gps”):

INSERT INTO `gps` (`Nummer`, `2014`, `2015`, `2016`,`2017`) VALUES 
('GP09-052010', '113', '111.3', '110.7','108'), 
('GP09-061010', '130.7', '79.5', '62', '81.1')

DB看起來像這樣:首先:gps.gps.1949,依此類推。 第二:gps_neu.gps.2014,依此類推。

我當前的代碼如下所示:

SELECT gps.2014,
       gps.2015,
       gps.2016,
       gps.2017
  FROM gps.gps
  JOIN LEFT gps_neu.gps.2014,
        gps_neu.gps.2015,
        gps_neu.gps.2016,
        gps_neu.gps.2017
    ON gps.gps.Nummer = gps_neu.gps.Nummer;

希望有人可以幫助我修復它。

了解了您的問題后,我認為您不需要左連接,只需要更新內部連接即可

update  gps.gps
  set gps.2014 = gps_neu.gps.2014 ,
   gps.2015 = gps_neu.gps.2014,
   gps.2016 = gps_neu.gps.2014,
   gps.2017 = gps_neu.gps.2014
FROM gps.gps
INNER JOIN gps_neu 
ON gps.gps.Nummer = gps_neu.gps.Nummer;

我認為您要查找的是SELECT列表中的IFNULL()

SELECT 
    IFNULL(gps.gps.2014, gps_neu.gps.2014) AS `2014`,
    IFNULL(gps.gps.2015, gps_neu.gps.2015) AS `2015`,
    IFNULL(gps.gps.2016, gps_neu.gps.2016) AS `2016`,
    IFNULL(gps.gps.2017, gps_neu.gps.2017) AS `2017`
FROM gps.gps
LEFT JOIN gps_neu.gps
ON gps.gps.Nummer = gps_neu.gps.Nummer;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM