代码之家  ›  专栏  ›  技术社区  ›  Tom

MySQL:如果特定值的行数小于x,是否可以插入?

  •  3
  • Tom  · 技术社区  · 15 年前

    为了给出一个简单的类比,我有一个表如下:

    身份证(pk)礼品赠与人身份证(fk)礼品接收人身份证(fk)礼品日期

    是否可以在单个查询中以这样一种方式更新表:仅当某人到目前为止拥有的礼物少于10件(即拥有相同礼物赠送者ID的礼物少于10件)时,才会添加一行(即另一个人的礼物)?

    这样做的目的是将桌子的尺寸限制为每人10件礼物。

    事先谢谢。

    3 回复  |  直到 15 年前
        1
  •  2
  •   nathanchere Jitendra Vyas    15 年前

    “这是否也是‘否则,更新最旧行中的字段’?”

    这也是一个相当血腥的重要环节吗?

    我不会在单个查询中做复杂的事情,我会选择首先测试最旧的,然后相应地更新或插入。

    不知道您使用的语言不是SQL,我将只使用非SQL部分的伪代码。

    SELECT TOP 1 id FROM gifts
    WHERE (SELECT COUNT(*) FROM gifts WHERE gift_giver_id = senderidvalue
    ORDER BY gift_date ASC) > 9;
    
    {if result.row_count then}
    
    INSERT INTO gifts (gift_giver_id, gift_receiver_id,gift_date)
    VALUES val1,val2,val3
    
    {else}
    
    UPDATE gifts SET gift_giver_id = 'val1',
    gift_receiver_id = 'val2',gift_date = 'val3'
    WHERE {id = result.first_row.id}
    

    您的请求有一个问题,您试图找到一个查询来执行一个选择以及插入或更新。可能有人会过来打电话给我证明我错了,但我认为除非您想进入存储过程,否则您是在要求不可能的。

        2
  •  3
  •   mynameiscoffey    15 年前

    尝试:

    insert into tablename
       (gift_giver_id, gift_receiver_id, gift_date)  
    select GIVER_ID, RECEIVER_ID, DATE from Dual where  
       (select count(*) from tablename where gift_receiver_id = RECEIVER_ID) < 10
    
        3
  •  1
  •   nathanchere Jitendra Vyas    15 年前

    我不是SQL专家,但我认为下面这样的方法应该有效:(假设礼物的表名):

    INSERT INTO gifts (gift_giver_id, gift_receiver_id,gift_date)
    SELECT DISTINCT senderidvalue,receiveridvalue,datevalue FROM gifts
    WHERE (SELECT COUNT(*) FROM gifts WHERE gift_giver_id = senderidvalue ) < 10;
    

    [编辑]代码格式不喜欢我:(