我有两张 table 。门票和门票 list 。 如果该项目售罄,则票表中的售罄列需要为 1。 当 table 票列表中该项目的计数为 2 时, table 票需要售罄。
ticket
ticketid, quantity, soldout
21 2 1
ticketlist
ticketlistid, ticketid
3 21
4 21
逻辑是:
如果 ticket.quantity - (COUNT(ticketlist.ticketlistid) WHERE ticket.ticketid = ticketlist.ticketlistid) > 0,则售罄应为“1”
这是我试过的MySQL
UPDATE ticket
SET soldout = '1'
WHERE quantity - (SELECT ticket.ticketid, COUNT(ticketlist.ticketlistid)
FROM ticket, ticketlist
WHERE ticket.ticketid = ticketlist.ticketid) > '0';
我们将不胜感激。
最佳答案
在你的子选择中:
- 您应该只返回一列。
- 不要选择更新中已有的同一张表。
您可能还想设置 sold_out
到一个quantity - (SELECT ...) <= 0
, 而不是 > 0
正如您目前正在做的那样。
将查询更改为:
UPDATE ticket
SET soldout = '1'
WHERE quantity - (
SELECT COUNT(ticketlist.ticketlistid)
FROM ticketlist
WHERE ticket.ticketid = ticketlist.ticketid
) > 0;
您的数据库也是非规范化的。您将信息存储在一个表中,这些信息可以从另一个表中的数据派生。如果两者不同步,这种冗余可能会导致错误。我建议您仅在出于性能原因需要时才这样做。
关于mysql - 根据该项目的计数确定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3172345/