我正在为sqlite3中的纯sql语句寻找类似pythonAssert的模式。我可以用python编写代码
assert len(my_var)==1, "Unexpected length, raise an error"
在sqlite3调用中,是否有一种模式可以用来实现相同的效果,该调用将从以下形式的命令行执行:
sqlite3 my_database.db < script.sql > output.tsv
问题的结构是这样的。给定一个包含列(col_a,col_b,col_c)的表,列c是a和b的散列,因此a和b的唯一对期望为c生成唯一值,而a和b的重复对则为c生成相同的值。我有兴趣
SELECT A, B, C, COUNT(*) FROM mytable GROUP BY A, B;
然而,我的哈希算法为相同的a,b对产生不同值的可能性很小(不要问哈希算法,这是一个在真空中运行的无摩擦隐喻)。在上面的select中,对于sqlite,我相信其行为将是默默地获取c的第一个值并丢弃其余的值。我可以使用groupconcat来保存所有的值,我不希望我的散列值变成一个单独的字符串。我可以按a,b,c分组,但后面的步骤取决于ab对的唯一性。真的,我想看到的行为是,查询爆炸并抱怨。
有没有一种方法可以Asserta,b没有放弃c的任何值?或该长度(按a,b分组)=长度(按a,b,c分组)
1条答案
按热度按时间fhity93d1#
从你的描述来看,尤其是。。。
后面的步骤取决于a、b对的唯一性
…一种接近的方法是在这个阶段已经强制要求成对必须是唯一的:
这样,就永远不会有(a,b)的重复对——sqlite不允许您插入它们——因为不可能有重复对,所以永远不会出现它们的c列不一致的情况。