0

我试图用来自另一个表列的数据填充一个表的一列中的所有行,并使用产品代码将它们全部结合起来。

所以aatest.stock要更新products_attributes.attributes_part_number

这就是我所拥有的:

$dbh = new PDO('mysql:host=localhost;dbname='. 
           DB_DATABASE, DB_SERVER_USERNAME, DB_SERVER_PASSWORD);

$dbh->exec('UPDATE products_attributes 
        SET aatest.code = products_attributes.attributes_part_number 
        WHERE products_attributes.attributes_stock = aatest.stock');

    ?>

任何关于为什么这不起作用的建议将不胜感激。

我正在运行 MySQL 5.5

4

4 回答 4

3

您的语句“不起作用”的原因是因为它是无效的 MySQL 语法。

http://dev.mysql.com/doc/refman/5.5/en/update.html

像这样的东西应该可以得到你想要的结果,将表中的列设置为code从表列中aatest检索到的值products_attributes

UPDATE aatest
  JOIN products_attributes 
    ON aatest.stock = products_attributes.attributes_stock
   SET aatest.code = products_attributes.attributes_part_number

如果要避免使用 JOIN 关键字,可以改用逗号运算符,并将连接谓词从 ON 子句移至 WHERE 子句:

UPDATE aatest
     , products_attributes 
   SET aatest.code = products_attributes.attributes_part_number
 WHERE aatest.stock = products_attributes.attributes_stock

(但连接语法的逗号风格是老派,我们喜欢这种JOIN ... ON风格。)

我得到这样一个语句的方法是从一个 SELECT 语句开始,如下所示:

SELECT *
  FROM aatest
  JOIN products_attributes 
    ON aatest.stock = products_attributes.attributes_stock

(如果是很多列,当然,我会指定感兴趣的列。)

SELECT 让我看看将要更新哪些行、code列的当前值(来自 aatest)以及将分配的新值。

一旦我得到这个工作,我可以用SELECT * FROM' UPDATE'关键字替换' ',然后添加一个SET指定要更新的列的子句。

  SET aatest.code = expr 

(关于更新语法的奇怪之处在于SET子句需要出现在WHERE子句之前。)

于 2013-01-21T21:38:26.790 回答
1

您需要在 UPDATE 语句中添加两个表之间的连接。

像这样的东西:

UPDATE aatest
       JOIN products_attributes on products_attributes.attributes_stock = aatest.stock
        SET aatest.code = products_attributes.attributes_part_number 
于 2013-01-21T21:35:27.820 回答
0

感谢大家的所有投入,这真的很有帮助。最后正确的代码是这样的:

$dbh->exec('UPDATE products_attributes, aatest 
            SET products_attributes.attributes_stock = aatest.stock 
            WHERE products_attributes.attributes_part_number = aatest.code');

但是,我在拔掉头发几个小时后发现的问题是我在 MYSQL 中创建的表与我试图与之交换数据的表有不同的编码(默认设置)。嗬!

希望这可以帮助另一个崭露头角的程序员,就像我一样,这是他自己最大的敌人:D

再次感谢所有输入。你们所有人试图帮助的速度之快让我不知所措。对我来说这是第一次。

于 2013-01-22T22:07:22.690 回答
0

尝试:

UPDATE products_attributes, aatest 
    SET aatest.code = products_attributes.attributes_part_number 
        WHERE products_attributes.attributes_stock = aatest.stock
于 2013-01-21T21:45:09.023 回答