简体   繁体   English

带有子查询的MySQL UPDATE为null

[英]MySQL UPDATE with subquery for null

I'm trying to update the status of all airplanes, using a subquery, to 'OUT' who are currently out and have not returned. 我正在尝试使用子查询将所有飞机的状态更新为当前已退出且尚未返回的“OUT”。 My foreign key is PLANE_NUM. 我的外键是PLANE_NUM。 I'm trying it like this but I've got an error: 我正在尝试这样但我有一个错误:

UPDATE plane
SET STATUS='OUT'
WHERE PLANE_NUM 
IN (SELECT *
    FROM plane p, flight f
    WHERE p.PLANE_NUM = f.PLANE_NUM
    AND FLIGHT_RETURNDATE IS null);

A better way of doing is by joining as 更好的方法是加入as

update plane p
left join flight f
on p.PLANE_NUM = f.PLANE_NUM
SET p.STATUS='OUT'
where f.FLIGHT_RETURNDATE IS null ;

problem you are facing is because ==> MySQL doesn't allow referring to a table that's targeted for update in a FROM clause, which can be frustrating. 你面临的问题是因为==> MySQL不允许在FROM子句中引用一个以更新为目标的表,这可能令人沮丧。

This will work for you 这对你有用

UPDATE plane
SET STATUS='OUT'
WHERE PLANE_NUM 
IN (SELECT * FROM (select p.PLANE_NUM
    FROM plane p, flight f
    WHERE p.PLANE_NUM = f.PLANE_NUM
    AND FLIGHT_RETURNDATE IS null) as B );

Not Optimized. 没有优化。 Please refer to links below and optimize as per your requirement 请参阅以下链接并根据您的要求进行优化

You can't specify target table for update in FROM clause 您无法在FROM子句中指定要更新的目标表

http://www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in-mysql/ http://www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in-mysql/

Try this one. 试试这个吧。

UPDATE airplane, plane, flight
SET airplane.STATUS='OUT'
WHERE airplane.PLANE_NUM = plane.PLANE_NUM
    AND plane.PLANE_NUM = flight.PLANE_NUM
    AND flight.LIGHT_RETURNDATE IS null

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM