Mysql 使用联接在查询中更新。要按行数增加的计数器

Mysql 使用联接在查询中更新。要按行数增加的计数器,mysql,sql,Mysql,Sql,我写了一个如下的查询 UPDATE tbl_bookings tb INNER JOIN tbl_slots ts ON ( tb.slot_id = ts.id ) SET tb.seat_freed = 1, ts.free_machines = ts.free_machines + 1 WHERE 1 AND tb.seat_freed = 0 AND tb.transactionComplete = 0 在这里,我试图通过将seat_freed更新为1并将free_machines计

我写了一个如下的查询

UPDATE 
tbl_bookings tb
INNER JOIN
tbl_slots ts
ON ( tb.slot_id = ts.id )
SET tb.seat_freed = 1, ts.free_machines = ts.free_machines + 1
WHERE 1
AND tb.seat_freed = 0
AND tb.transactionComplete = 0
在这里,我试图通过将seat_freed更新为1并将free_machines计数器增加1来释放座椅

如果有超过1行,比如说从tbl_预订返回的3行,我想将计数器增加


有没有办法,用单曲。很明显,我可以通过将其分解为不同的查询来实现,但单个查询正是我想要的

您可以使用具有完全相同条件的子查询来计算受更新影响的行数。我使用DISTINCT进行计数,因为我不知道在您的示例中,预订和插槽是如何关联的

UPDATE tbl_bookings tb
    INNER JOIN tbl_slots ts ON ( tb.slot_id = ts.id )
    INNER JOIN (SELECT count(DISTINCT b.id) seats_to_be_freed 
                FROM tbl_bookings b INNER JOIN tbl_slots s ON ( b.slot_id = s.id ) 
                WHERE b.seat_freed=0 and b.transactionComplete=0) tmp
SET tb.seat_freed = 1, ts.free_machines = tmp.seats_to_be_freed 
WHERE 1
    AND tb.seat_freed = 0
    AND tb.transactionComplete = 0

因此,如果有多行受更新影响,您想增加计数器?是的,例如,假设tb.seat_freed=1是为3行执行的,那么ts.free_机器应该增加3。我同意这样做是可行的。。但正如我所说,我期待着一个单身。。i、 e.没有任何子查询。。谢谢:好的,我知道你想要一份声明。我很肯定你所期望的是不可能的。。但谁知道。。让我们看看是否有人能想出更好的答案D