使用子查询

时间:2018-01-23 11:31:39

标签: mysql

我有这个表卖家,其列是

id   mobile1
1    787811

我有另一个具有相同列的表,我只想更新此表中的mobile1字段,其他表中的值表示“copy”。 我写了这个查询

UPDATE seller
SET mobile1 = (
  SELECT SUBSTRING_INDEX(mobile1, '.', 1)
  FROM copy)
WHERE 1;

当我运行它时,我收到了这个明显的错误。

  

子查询返回超过1行,   有办法做到这一点??

4 个答案:

答案 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