mysql - 根据该项目的计数确定值

标签 mysql

我有两张 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/

相关文章:

php - 超链接行获取另一个页面中的行数据,PHP?

mysql - 选择sql表的最后3行

php - 从逗号分隔值 mysql 和数组中查找并选择

java - 保存我的对象时出现 Hibernate 异常

c# - 我想从 C# 中的选择查询中获取 id,但每次运行程序时,查询都会返回 "-1"

php - 可以 * 替换 mysql WHERE 中的值

mysql - 如何使用 NOT IN laravel

android - SQLite 错误 - 滥用聚合 : sum()

mysql - 如何计算复杂查询中某一列中相同值的数量?

php - 在 MySql 中使用 group by 运行总计