在阅读了所有“INSERT INTO”帖子和文档之后,我仍然不确定我想要的是否可行。 我想将下面的 UPDATE 更改为 INSERT INTO,因为我有很多 10 万条(速度问题):
UPDATE city c
SET
c.g17h = '3196504',
c.g17q = '2593487',
c.g17k = '0',
c.g17w = '0',
c.g17s = '0'
WHERE
p17t = 30 AND p17l = '30';
或
UPDATE city c
SET
c.g1h = '0',
c.g1q = '0',
c.g1k = '0',
c.g1w = '0',
c.g1s = '0'
WHERE
p1t = 1
AND p1l = '1';
但是,我最好的解决方案不起作用:
INSERT INTO city (g17h, g17q, g17k, g17w, g17s)
SELECT
'3196504',
'2593487',
'0',
'0',
'0'
FROM valuestoretab
WHERE
p17t = 30
AND p17l = '30';
这当然是因为我的 WHERE 条件只能在第一个表(city)中得到满足,而不能在第二个表中得到满足,而第二个表只是一个值表,而 city 表是一个数据集,其中每个 id 都有特定的值对于 p17t、p17l 等。 澄清一下:
The first table (city) looks like
cityid1, ownerid1, islandid1, p17t, p17l
cityid2, ownerid2, islandid2, p17t, p17l
p17t 和 p17l 的每一行都有不同的值。
所以,我的问题是: 1. 是否可以为要插入的表编写带有 WHERE 条件的 INSERT 查询? 2. 如果不是,我是否必须坚持我的更新或是否有其他(快速!)解决方案?
感谢社区!
fiddle
最佳答案
可以使用 select 语句快速回答插入
Insert INTO MyTable (Val1, Val2)
Select
SomeValue,
AnotherValue
From MyOtherTable
Where Date = Getdate()
另一方面,您也可以更新许多记录,如下例所示:
Update t1
Set
t1.Val1 = t2.SomeValue,
t1.Val2 = t2.AnotherValue
From MyTable t1
Inner join MyOtherTable t2 ON t1.PK = t2.FK
where t2.Date = getdate()
编辑:
当我阅读以下查询时,我假定 p17t 和 p17l 来自 valuestoretab。
UPDATE city c
SET
c.g17h = '3196504',
c.g17q = '2593487',
c.g17k = '0',
c.g17w = '0',
c.g17s = '0'
WHERE
p17t = 30 AND p17l = '30';
==> 将其更改为:
UPDATE c
SET
c.g17h = '3196504',
c.g17q = '2593487',
c.g17k = '0',
c.g17w = '0',
c.g17s = '0'
FROM City c, ValueStoreTab v
WHERE
c.SomeCol = v.SomeCol -- Here, your relation must exist!
AND v.p17t = 30 AND v.p17l = '30';
关于MYSQL - INSERT INTO 使用表 1 的 WHERE 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23262255/