根据表中的id计算特定行的数量,并根据与第一个表中相同的id更新其他表行的数据

时间:2017-08-23 12:29:32

标签: mysql

如果我想代表特定产品ID从表中计算行数(列:状态),那么在具有相同产品的另一个表的每一行上使用这些计数来更新第二个表行(列:什么是确切的query.table 2有一个表1的外键我尝试了很多,这是我迄今为止所做的,但仍然失败了:

   a  b
1 NA NA
2  2  3
3  4  5

编辑:

有两个表table1和表2

例如

result

我想要执行的是代表car_id计算表2中所有汽车的状态,如果它的status = active小于1,则我想将表1的状态更改为活动状态。如果您在表2中看到数据car id = 1的status = active小于1,则表1中car_id的状态现在应从保留更改为活动状态。我希望这可能会给你一个暗示我想要实现的目标。

3 个答案:

答案 0 :(得分:0)

希望它对你有用。请参考以下查询。

UPDATE car_detail SET car_detail.`status`='active' 
WHERE car_detail.car_id=(
    SELECT car_reservation_detail.car_ID FROM car_reservation_detail 
    WHERE car_reservation_detail.status='deactive' 
    GROUP BY car_reservation_detail.car_ID
    HAVING COUNT(car_reservation_detail.car_ID)<1
)

答案 1 :(得分:0)

您正在寻找的是一个查询,它本质上是检查您是否有任何行&#34;活跃&#34;因此,您可以在更新语句中使用左连接,以确保没有状态为&#34; active&#34;。

以下查询适用于您提供的示例数据集。

UPDATE table_1 t1 
       LEFT JOIN table_2 t2  on t1.car_id = t2.car_id 
                 AND t2.status = 'active' 
                 SET t1.status = 'active'
       WHERE t2.res_id is null and t1.status != 'active';

答案 2 :(得分:0)

感谢您帮助@Amardeep Verma您的回答给了我一个管理查询的提示,这就是它的工作原理

UPDATE car_detail c SET c.`status`='active'
WHERE c.status='reserved' AND c.car_detail_id IN(SELECT cr.car_detail_id FROM car_reservation_detail cr
    WHERE cr.status='deactive'AND cr.car_detail_id NOT IN (SELECT cr.car_detail_id from car_reservation_detail cr
    WHERE cr.status='active')
    GROUP BY cr.car_detail_id)