Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从视图中选择->;更新或插入到表中_Mysql_Sql - Fatal编程技术网

Mysql 从视图中选择->;更新或插入到表中

Mysql 从视图中选择->;更新或插入到表中,mysql,sql,Mysql,Sql,我想从mysql视图中选择数据,该视图收集并连接来自“联邦”表的数据。 这些数据应该插入到一个与视图非常相似的表中 例如: 需要插入或更新数据的表: 插入式 您可以使用查询 来自mysql文档 “替换”的工作方式与“插入”完全相同,只是 表与主键或唯一键的新行具有相同的值 索引时,在插入新行之前删除旧行。看见 第13.2.5节,“插入语法” 主键或未指定的唯一索引将插入新行。 因此,无需选择检查。解决此问题的理想方法是在重复密钥更新时使用 在我的示例中,解决方案如下所示: INSERT INTO

我想从mysql视图中选择数据,该视图收集并连接来自“联邦”表的数据。 这些数据应该插入到一个与视图非常相似的表中

例如:

需要插入或更新数据的表:

插入式 您可以使用查询

来自mysql文档

“替换”的工作方式与“插入”完全相同,只是 表与主键或唯一键的新行具有相同的值 索引时,在插入新行之前删除旧行。看见 第13.2.5节,“插入语法”

主键或未指定的唯一索引将插入新行。


因此,无需选择检查。

解决此问题的理想方法是在重复密钥更新时使用

在我的示例中,解决方案如下所示:

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`;