Mysql 从视图中选择->;更新或插入到表中
我想从mysql视图中选择数据,该视图收集并连接来自“联邦”表的数据。 这些数据应该插入到一个与视图非常相似的表中 例如: 需要插入或更新数据的表: 插入式 您可以使用查询 来自mysql文档 “替换”的工作方式与“插入”完全相同,只是 表与主键或唯一键的新行具有相同的值 索引时,在插入新行之前删除旧行。看见 第13.2.5节,“插入语法” 主键或未指定的唯一索引将插入新行。Mysql 从视图中选择->;更新或插入到表中,mysql,sql,Mysql,Sql,我想从mysql视图中选择数据,该视图收集并连接来自“联邦”表的数据。 这些数据应该插入到一个与视图非常相似的表中 例如: 需要插入或更新数据的表: 插入式 您可以使用查询 来自mysql文档 “替换”的工作方式与“插入”完全相同,只是 表与主键或唯一键的新行具有相同的值 索引时,在插入新行之前删除旧行。看见 第13.2.5节,“插入语法” 主键或未指定的唯一索引将插入新行。 因此,无需选择检查。解决此问题的理想方法是在重复密钥更新时使用 在我的示例中,解决方案如下所示: INSERT INTO
因此,无需选择检查。解决此问题的理想方法是在重复密钥更新时使用 在我的示例中,解决方案如下所示:
INSERT INTO insertTable
(
`foreignId`,
`foreignData`
)
SELECT
`dataView`.`foreignId`,
`dataView`.`foreignData`
FROM
`dataView`
ON DUPLICATE KEY UPDATE
`foreignId` = `dataView`.`foreignId`,
`foreignData` = `dataView`.`foreignData`;
因为数据列,replace不会起作用,它会丢失吗?我在stackoverflow上发现了一些东西:也许这是正确的解决方案,我会有一个tryYa来完成这项工作:) +-----------+-------------+ | foreignId | foreignData | +-----------+-------------+ | a | AAA | | b | BBB | | c | CCC | +-----------+-------------+ +----+-----------+------+-------------+ | id | foreignId | data | foreignData | +----+-----------+------+-------------+ | 1 | a | 111 | AAA | | 2 | b | 222 | BBB | | 3 | b | | CCC | +----+-----------+------+-------------+
$result = SELECT * FROM dataView;
foreach $result as $row {
if(SELECT COUNT(*) FROM inserTable WHERE foreignId=$row[foreignId]>0)
UPDATE insertView SET foreignData = $row[foreignData] WHERE foreignId=$row[foreignId];
else
INSERT INTO insertView (id, foreignId, foreignData) VALUES (null,$row[foreignId],$row[foreignData];
}
REPLACE INTO insertView (id, foreignId, foreignData) VALUES (null,$row[foreignId],$row[foreignData];
INSERT INTO insertTable
(
`foreignId`,
`foreignData`
)
SELECT
`dataView`.`foreignId`,
`dataView`.`foreignData`
FROM
`dataView`
ON DUPLICATE KEY UPDATE
`foreignId` = `dataView`.`foreignId`,
`foreignData` = `dataView`.`foreignData`;