python 基于同一表中其他行更新记录的MySQL查询(带inputparameter)

2ic8powd  于 2023-03-28  发布在  Python
关注(0)|答案(1)|浏览(113)

我有这个表来存储来自不同供应商的文章。这些是我的表“artPerBrand”中最重要的表字段:

|ID     | ArtNrShort   | ArtNrLong   | SupplierID 
--------------------------------------------------
|45     | mik25        | mike25_002  | 1
|326    | mik25        |             | 2

我检查表中的行(具有相同的ArtNrShort),如果我找到一个,我想用现有ArtNrLong的值更新具有空ArtNrLong的行。我确实需要输入参数“varArtNrShort”,因为我需要在将来处理一些不同的场景。
我不是一个SQL大师,但我想出了这个查询,它应该几乎在那里。然而,当我执行这个(Python)ArtNrLong的ID 326保持空。我在这里错过了什么?

varArtNrShort = 'mik25'
sql = "UPDATE artPerBrand t1 JOIN artPerBrand t2 ON t1.ArtNrShort = t2.ArtNrShort SET t1.ArtNrLong = t2.ArtNrLong WHERE t1.ArtNrLong = '' AND t2.ArtNrLong <> '' AND t1.ArtNrShort = '%s'"
val = (varArtNrShort)
cur.execute(sql, val)
mydb.commit()

我将我的查询改为:

"UPDATE artPerBrand a1 INNER JOIN artPerBrand a2 ON a1.ArtNrShort = a2.ArtNrShort SET a1.ArtNrLong = a2.ArtNrLong WHERE a2.ArtNrLong IS NOT NULL AND a1.ArtNrLong IS NULL AND a1.ArtNrShort = 'mik25'"

不幸的是,这并没有解决我的问题。ArtNrLong没有更新。

mum43rcc

mum43rcc1#

我们可以在这里使用以下self join方法:

UPDATE artPerBrand a1
INNER JOIN artPerBrand a2
    ON a2.ArtNrShort = a1.ArtNrShort
SET a1.ArtNrLong = a2.ArtNrLong
WHERE a2.ArtNrLong IS NOT NULL AND
      a1.ArtNrLong IS NULL AND
      a1.ArtNrShort = 'mik25';

相关问题