【问题标题】:run query if row count = 0如果行数 = 0 则运行查询
【发布时间】:2016-01-02 23:31:33
【问题描述】:

我创建了 3 个表:playlist、tracklist 和 xmlexport,用于存储我的播放列表。为了避免重复播放列表中的任何项目,我使用从播放列表中插入的曲目列表,并将曲目列表的第一行插入到我的 xmlexport 中,然后以 .xml 的形式导出要播放的曲目我的播放器要读取的文件。每次发生此过程时,我都会从曲目列表中删除一行,因此当表播放最后一项时,它会变为空&我需要运行查询以从播放列表表中更新曲目列表表。这是我一直在玩的,但它不能正常工作。

       INSERT INTO dms.test_trk
       SELECT * FROM dms.test_ply
       WHERE row_count() <= 0;

【问题讨论】:

  • 不确定我是否正确理解了您的问题,但如果我有,听起来您需要的是队列而不是数据库。以 redis lpush 和 rpop 为例。

标签: mysql rowcount ifnull


【解决方案1】:

我认为您需要一个存储过程来检查 test_trk 中的 count(*) 是否为 0。如果是,请运行:

 INSERT INTO dms.test_trk
 SELECT * FROM dms.test_ply

Thisthis 应该会让你走上正轨。

【讨论】:

    【解决方案2】:

    你的陈述

     INSERT INTO dms.test_trk
     SELECT * FROM dms.test_ply
     WHERE row_count() <= 0;
    

    您究竟希望发生什么?我原以为最后一次操作的结果(即执行此语句之前的结果)将与零进行比较,因此是否从 test_ply 检索行。

    然而,您似乎认为 row_count 以某种方式告诉您 test_trk 中是否有记录。

    这两个假设似乎都是错误的。我的测试表明,在启动 INSERT 时 row_count 被重置为 -1,因此您根本无法在 INSERT 语句中使用此函数。

    您正在寻找的是一个简单的 EXISTS 子句:

    insert into test_trk
    select * from test_ply where not exists (select * from test_trk);
    

    【讨论】:

    • 当我运行“不存在的地方”时,它返回 0 行受影响。我在ms访问中使用存储函数(如果rst.recordcount
    • 这个语句所做的就是重新填充 test_trk 以防它为空。你不需要做任何事情。您不必额外计算记录。只要 test_trk 中至少有一个条目,该语句就什么也不做,只要 test_trk 完全为空,该语句就会重新填充表。
    • "where not exists" 对我不起作用,但我今天又试了一次,是的!它的工作!所以我真的很感谢你花时间来看看这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 2022-07-02
    • 1970-01-01
    • 2015-01-08
    相关资源
    最近更新 更多