错误代码:1093。您无法在 FROM 子句中为更新指定目标 table 'mm'
Error Code: 1093. You can't specify target table 'mm' for update in FROM clause
i google 这个问题问了好几次,但未能解决上述问题。请帮我。
我的查询:
UPDATE meter As mm SET mm.mdi_reset_date='2', mm.write_mdi_reset_date='1'
WHERE mm.msn IN (SELECT m.msn
FROM meter m
INNER JOIN connection con ON con.feeder_id = m.feeder_id
INNER JOIN consumers co ON co.consumer_id = con.customer_id
INNER JOIN customer cs ON co.parent_id = cs.customer_id
INNER JOIN cs_group_details cd ON cd.customer_id=cs.customer_id
WHERE co.batch_no = '30'
AND cd.cs_group_id='4');
首先使用查询
创建临时table
CREATE TABLE meter_temp LIKE meter;
现在将数据从 meter
插入到临时 table meter_temp
INSERT INTO meter_temp SELECT * FROM meter;
使用您的更新查询
UPDATE meter As mm SET mm.mdi_reset_date='2', mm.write_mdi_reset_date='1'
WHERE mm.msn IN (SELECT m.msn
FROM meter_temp m
INNER JOIN connection con ON con.feeder_id = m.feeder_id
INNER JOIN consumers co ON co.consumer_id = con.customer_id
INNER JOIN customer cs ON co.parent_id = cs.customer_id
INNER JOIN cs_group_details cd ON cd.customer_id=cs.customer_id
WHERE co.batch_no = '30'
AND cd.cs_group_id='4');
让我知道它是否有效。
已编辑::
$subQuery = "SELECT m.msn FROM meter_temp m INNER JOIN connection con ON con.feeder_id = m.feeder_id INNER JOIN consumers co ON co.consumer_id = con.customer_id INNER JOIN customer cs ON co.parent_id = cs.customer_id INNER JOIN cs_group_details cd ON cd.customer_id=cs.customer_id WHERE co.batch_no = '30' AND cd.cs_group_id='4'";
$result = mysqli($con,$query); // assuming you are using mysqli. change as per your code
while($row = mysqli_fetch_assoc($result))
{
$msnArray[] = $row['msn'];
}
$msn = implode(",",$msnArray); // assuming msn is integer and not string.
// if it is string then you have to wrap it in quotes.
// Now run update query
$update = "UPDATE meter SET mdi_reset_date='2', write_mdi_reset_date='1' WHERE msn IN ({$msn})";
$updateResult = mysqli_query($con,$update);
i google 这个问题问了好几次,但未能解决上述问题。请帮我。
我的查询:
UPDATE meter As mm SET mm.mdi_reset_date='2', mm.write_mdi_reset_date='1'
WHERE mm.msn IN (SELECT m.msn
FROM meter m
INNER JOIN connection con ON con.feeder_id = m.feeder_id
INNER JOIN consumers co ON co.consumer_id = con.customer_id
INNER JOIN customer cs ON co.parent_id = cs.customer_id
INNER JOIN cs_group_details cd ON cd.customer_id=cs.customer_id
WHERE co.batch_no = '30'
AND cd.cs_group_id='4');
首先使用查询
创建临时tableCREATE TABLE meter_temp LIKE meter;
现在将数据从 meter
插入到临时 table meter_temp
INSERT INTO meter_temp SELECT * FROM meter;
使用您的更新查询
UPDATE meter As mm SET mm.mdi_reset_date='2', mm.write_mdi_reset_date='1'
WHERE mm.msn IN (SELECT m.msn
FROM meter_temp m
INNER JOIN connection con ON con.feeder_id = m.feeder_id
INNER JOIN consumers co ON co.consumer_id = con.customer_id
INNER JOIN customer cs ON co.parent_id = cs.customer_id
INNER JOIN cs_group_details cd ON cd.customer_id=cs.customer_id
WHERE co.batch_no = '30'
AND cd.cs_group_id='4');
让我知道它是否有效。
已编辑::
$subQuery = "SELECT m.msn FROM meter_temp m INNER JOIN connection con ON con.feeder_id = m.feeder_id INNER JOIN consumers co ON co.consumer_id = con.customer_id INNER JOIN customer cs ON co.parent_id = cs.customer_id INNER JOIN cs_group_details cd ON cd.customer_id=cs.customer_id WHERE co.batch_no = '30' AND cd.cs_group_id='4'";
$result = mysqli($con,$query); // assuming you are using mysqli. change as per your code
while($row = mysqli_fetch_assoc($result))
{
$msnArray[] = $row['msn'];
}
$msn = implode(",",$msnArray); // assuming msn is integer and not string.
// if it is string then you have to wrap it in quotes.
// Now run update query
$update = "UPDATE meter SET mdi_reset_date='2', write_mdi_reset_date='1' WHERE msn IN ({$msn})";
$updateResult = mysqli_query($con,$update);