我有这个表卖家,其列是
id mobile1
1 787811
我有另一个具有相同列的表,我只想更新此表中的mobile1字段,其他表中的值表示“copy”。 我写了这个查询
UPDATE seller
SET mobile1 = (
SELECT SUBSTRING_INDEX(mobile1, '.', 1)
FROM copy)
WHERE 1;
当我运行它时,我收到了这个明显的错误。
子查询返回超过1行, 有办法做到这一点??
答案 0 :(得分:1)
您需要使用条件来仅选择一行,或者您应该使用LIMIT
:
UPDATE seller
SET mobile1 = (
SELECT SUBSTRING_INDEX(mobile1, '.', 1)
FROM copy
LIMIT 1)
WHERE id = 1;
答案 1 :(得分:0)
您可以使用MySQL limit.
约束返回的行数UPDATE seller SET mobile1=(SELECT SUBSTRING_INDEX(mobile1,'.',1)
FROM copy LIMIT 1)
WHERE id=1;
答案 2 :(得分:0)
如果有人在这里寻找可能的答案就是我所做的,我用while循环创建了一个程序。
DELIMITER $$
CREATE PROCEDURE update_mobile(IN counting BIGINT);
BEGIN
declare x INT default 0;
SET x = 1;
WHILE x <= counting DO
UPDATE copy SET mobile1=(SELECT SUBSTRING_INDEX(mobile1, '.', 1) as mobi FROM seller WHERE id=x LIMIT 1) WHERE id=x;
SET x=x + 1;
END WHILE;
END
最后我按计数(id)计算了行数,并将此数字传递给我的程序
SET @var =count;
CALL update_mobile(@var);
它就像一个魅力......
答案 3 :(得分:-1)
如果要复制所有数据,可以执行以下操作:
INSERT INTO `seller` (`mobile1`) SELECT SUBSTRING_INDEX(mobile1,'.',1) FROM copy