2016-12-07 33 views
-1

下面的更新查询不工作,而是选择查询里面是:我的UPDATE查询有子查询有什么问题?

UPDATE tb_alunos_detalhes A 
SET A.ADTELALUNO = B.TEL 
FROM B (
    SELECT ADID ID, 
      (CASE 
       WHEN `ADTELALUNO` <> '' THEN (CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`ADTELALUNO`, ' ', 1), ' ', -1), ' 9-', SUBSTRING(SUBSTRING_INDEX(SUBSTRING_INDEX(`ADTELALUNO`, ' ', 2), ' ', 10),6,10))) 
       ELSE '' 
      END) TEL 
    FROM tb_alunos_detalhes) B 
WHERE A.ADID = B.ID 

它给了我下面的错误:

Unexpected token. (near "(" at position 62) A new statement was found, but no delimiter between it and the previous one. (near "SELECT" at position 67) Unexpected token. (near ")" at position 381) Unexpected token. (near "B" at position 383)

我在做什么错?

+0

我试图改进问题和标题中的文字。还删除标签:PHP和SQL,因为它只是关于MySQL – agold

回答

0

您可能正在寻找一个update-join语法像

UPDATE tb_alunos_detalhes A 
JOIN (
    SELECT ID, 
      (CASE 
       WHEN `ADTELALUNO` <> '' THEN (CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`ADTELALUNO`, ' ', 1), ' ', -1), ' 9-', SUBSTRING(SUBSTRING_INDEX(SUBSTRING_INDEX(`ADTELALUNO`, ' ', 2), ' ', 10),6,10))) 
       ELSE '' 
      END) TEL 
    FROM tb_alunos_detalhes) B ON A.ADID = B.ID 
SET A.ADTELALUNO = B.TEL; 
0
use this for reference , and i think this will work for you 
UPDATE(
    SELECT Ord.OrderID, Ord.Completed 
    FROM Order1 Ord 
    WHERE EXISTS(
      SELECT * 
      FROM Product P 
      INNER JOIN Delivery D 
       ON Delivery.Delivered = 0 AND P.ProductID = Delivery.DeliveryID 
      WHERE Ord.OrderID = P.OrderID 
     ) 
) 
SET Completed = 'NO' ; 

//或不派生表:

UPDATE Order1 Ord 
SET Completed = 'NO' 
WHERE EXISTS(
     SELECT * 
     FROM Product P 
      INNER JOIN Delivery D 
      ON Delivery.Delivered = 0 AND P.ProductID = Delivery.DeliveryID 
     WHERE Ord.OrderID = P.OrderID 
    ); 
0

正确的语法是:

UPDATE tb_alunos_detalhes A 
    SET A.ADTELALUNO = (CASE WHEN `ADTELALUNO` <> '' 
          THEN (CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`ADTELALUNO`, ' ', 1), ' ', -1), ' 9-', SUBSTRING(SUBSTRING_INDEX(SUBSTRING_INDEX(`ADTELALUNO`, ' ', 2), ' ', 10),6,10))) 
          ELSE '' 
         END); 

A JOIN 没有必要。