代码之家  ›  专栏  ›  技术社区  ›  Carson Myers

如果sqlite3满足条件,则插入到表中

  •  4
  • Carson Myers  · 技术社区  · 14 年前

    如果我有两张桌子: files(id, owner) share(file_id, user) ,其中所有者和用户将是理论用户表中的主ID,如何将条目插入到 share 只有在进行共享的用户拥有该文件时?

    files:
    id: 1, owner: 1
    

    如果用户2想要查看文件1,我将使用以下查询:

    insert into share values (1, 2)
    

    case when (select owner from files where id=1) is 2
        then (insert into share values (1, 2));
    
    case (select owner from files where id=1) is 2
        then (insert into share values (1, 2));
    
    insert into share values (1, 2)
        where 2 not in (select owner from files where id=1)
    

    Cursor.rowcount 查看它是1还是0,如果是0,则用户没有完成操作的权限。

    如何正确编写此查询?

    2 回复  |  直到 14 年前
        1
  •  8
  •   Carson Myers    14 年前

    insert into share select id,2 as file_id from files where id=1 and owner=2;
    

    不需要一个 not null 子句或外键,没有例外。

        2
  •  3
  •   Carson Myers    14 年前

    嗯,我找到了一个办法,虽然这不是我希望找到的解决办法。我可以补充一下 not null 和/或 file_id share 表,然后尝试运行此查询:

    insert into share
        values(
            (select id as file_id from files where id=1 and owner=2),
            2
        );
    

    这样,如果用户不拥有文件id,select查询将不返回任何内容,notnull和/或外键约束将失败,我将在Python中得到一个异常。

    如果有人知道真正的解决方法,请让我知道,我觉得使用这种方法非常肮脏。