问题出在UPDATE行。我得到的错误说明错误:不是唯一的表/别名:"tmpStock"我以前从未使用过INNER JOIN。
$link = mysql_connect('host', 'log', 'pwd');
If (!$link) { die ('Could not connect: ' . mysql_error()); }
@mysql_select_db('admin_sandbox') or die ('Unable to select database');
$result = mysql_query("CREATE TEMPORARY TABLE tmpStock
(pid int(10), cid int(10), manufacturer_id int(10), is_visible enum('Yes',
'No'), product_type varchar(50), is_dollar_days enum('Yes',
'No'), product_id varchar(64), is_doba enum('Yes', 'No'),is_locked
enum('Yes', 'No'),
inventory_control enum('Yes', 'AttrRuleExc') ) ENGINE=MyISAM DEFAULT
CHARSET=latin1 ");
$result = mysql_query("LOAD DATA LOCAL INFILE 'sampleproducts.txt' INTO
TABLE tmpStock FIELDS TERMINATED BY ''t' ENCLOSED BY ''"' LINES TERMINATED
BY ''n'")or die ('Error: '.mysql_error ());
$result = mysql_query("UPDATE tmpStock INNER JOIN products ON
tmpStock.product_id = products.product_id SET
products.stock = tmpStock.stock WHERE tmpStock.product_id =
products.product_id") or die ('Error: '.mysql_error ());
您在UPDATE
查询中列出了两个表,然后在tmpStock
上列出了内部联接,因此在查询中复制了tmpStock
。您可以使用自联接,但它们需要一个别名。但在这里,它是完全多余的。
在MySQL中,像在SELECT
语句中一样使用INNER JOIN
,只有FROM
子句在开始时被UPDATE
替换,SET
放在表联接之后,WHERE
子句在最后:
"UPDATE tmpStock
INNER JOIN products ON tmpStock.product_id = products.product_id
SET products.stock = tmpStock.stock;"
此外,我逆转了SET
的表达。由于临时表是在用户会话后销毁的,所以您不会在任何一个表中看到更改。您很可能希望更新products
表中的stock
字段。