![](/img/trans.png)
[英]SQL MySQL UPDATE TABLE copy one column to other column in the same table such that nth row of first column = n+1th row of second column?
[英]copy row in same table and update just one column in MySQL
我需要根據某個條件(where子句)從表中復制一行,在同一表中進行重復輸入,並僅更新一列(foreign_key)。 但是因為“從表名中選擇*”會返回包括primary_key在內的所有字段,所以無法插入新行錯誤:重復鍵。
我不知道表的所有列,因此我無法通過在select查詢中僅提供必需的列名來忽略primary_key。
有什么辦法可以忽略primary_key本身的獲取..還是我可以獲取整行,並將primary_key的值設置為null,然后將該行插入表中,以便它為要添加的新行自動遞增primary_key。
謝謝。
通過查詢信息模式表並使用動態SQL來構建適當的語句,可以做您想要的事情。 但是,您應該格外小心,因為修改您不知道列名的表中的數據可能會導致各種問題:
DROP TABLE mytable;
CREATE TABLE `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`col1` varchar(255) DEFAULT NULL,
`col2` varchar(255) DEFAULT NULL,
`col3` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
INSERT INTO mytable (col1, col2, col3) VALUES ('A', 'B', 'C');
SELECT * FROM mytable;
+----+------+------+------+
| id | col1 | col2 | col3 |
+----+------+------+------+
| 1 | A | B | C |
+----+------+------+------+
SET @columns := (
SELECT
GROUP_CONCAT(column_name)
FROM information_schema.columns
WHERE table_schema = 'test'
AND table_name = 'mytable'
AND column_key <> 'PRI'
);
SET @sql := (
SELECT CONCAT(
'INSERT INTO mytable (', @columns, ') ',
'SELECT ', @columns, ' FROM mytable ',
'WHERE id = 1;'
)
);
SELECT @sql;
+---------------------------------------------------------------------------------------+
| @sql |
+---------------------------------------------------------------------------------------+
| INSERT INTO mytable (col1,col2,col3) SELECT col1,col2,col3 FROM mytable WHERE id = 1; |
+---------------------------------------------------------------------------------------+
PREPARE stmt FROM @sql;
EXECUTE stmt;
SELECT * FROM mytable;
+----+------+------+------+
| id | col1 | col2 | col3 |
+----+------+------+------+
| 1 | A | B | C |
| 2 | A | B | C |
+----+------+------+------+
如果您了解所獲得數組的序列,那么在放入某種條件后,您可以忽略具有主鍵的字段。
像這樣檢查是否可行
謝謝。
您怎么可能知道鍵是什么,卻不知道其他列是什么? 如果真是這樣,那么我認為你必須寫一些動態SQL -或者更好的是,給任務的人誰不知道表結構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.