Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么SQLite3不产生错误_Python_Sqlite - Fatal编程技术网

Python 为什么SQLite3不产生错误

Python 为什么SQLite3不产生错误,python,sqlite,Python,Sqlite,我对SQL非常陌生,但我正在尝试修复SQL查询的输出。然而,这个问题与bug无关,而是为什么SQLite3在应该产生错误时不产生错误 我的查询字符串如下所示: QueryString = ("SELECT e.event_id, " "count(e.event_id), " "e.state, " "MIN(e.boot_time) AS boot_time, " "e.time_occurred, " "COALESCE(e.info, 0) AS

我对SQL非常陌生,但我正在尝试修复SQL查询的输出。然而,这个问题与bug无关,而是为什么SQLite3在应该产生错误时不产生错误

我的查询字符串如下所示:

QueryString = ("SELECT e.event_id, " 
    "count(e.event_id), "
    "e.state, "
    "MIN(e.boot_time) AS boot_time, "
    "e.time_occurred, "
    "COALESCE(e.info, 0) AS info "
    "FROM events AS e "
    "JOIN leg ON leg.id = e.leg_id "
    "GROUP BY e.event_id "
    "ORDER BY leg.num_leg DESC, "
    "e.event_id ASC;\n"
    )
这将产生一个没有错误的输出

我不明白的是,为什么按e.event_id和e.state以及e.time_occurrent分组时没有错误,它不包含聚合函数,也不属于GROUP BY语句的一部分

e、 state是一个字符串列。e、 发生的时间是一个整数列


我正在使用Python中的查询字符串。

为了与MySQL兼容,这是允许的。(非聚合列值来自组中的某个随机行。)


由于SQLite使用min()或max()来确定非聚合列中的值来自组中具有最小/最大值的行。

为了与MySQL兼容,这是允许的。(非聚合列值来自组中的某个随机行。)


自SQLite以来,使用min()或max()可以确保非聚合列中的值来自组中具有最小/最大值的行。

SQLite和MySQL允许聚合查询中出现裸列。下文对此进行了解释:

在上面的查询中,“a”列是GROUPBY子句的一部分,并且 因此,输出的每一行都包含“a”的一个不同值。 “c”列包含在sum()聚合函数中,依此类推 该输出列是具有 “a”的值相同。但是“b”列的结果是什么?这个 答案是“b”结果将是其中一个表达式中“b”的值 构成聚合的输入行。问题是你通常是这样做的 不知道哪个输入行用于计算“b”,在许多情况下也是如此 “b”的值未定义

您的具体查询是:

SELECT e.event_id, count(e.event_id), e.state, MIN(e.boot_time) AS boot_time, 
      e.time_occurred, COALESCE(e.info, 0) AS info
FROM events AS e JOIN
     leg
     ON leg.id = e.leg_id "
GROUP BY e.event_id 
ORDER BY leg.num_leg DESC, e.event_id ASC;

如果
e.event\u id
events
中的主键,那么ANSI标准甚至支持这种语法,因为
event\u id
足以在
events

中唯一定义行中的其他列,SQLite和MySQL允许聚合查询中的裸列。下文对此进行了解释:

在上面的查询中,“a”列是GROUPBY子句的一部分,并且 因此,输出的每一行都包含“a”的一个不同值。 “c”列包含在sum()聚合函数中,依此类推 该输出列是具有 “a”的值相同。但是“b”列的结果是什么?这个 答案是“b”结果将是其中一个表达式中“b”的值 构成聚合的输入行。问题是你通常是这样做的 不知道哪个输入行用于计算“b”,在许多情况下也是如此 “b”的值未定义

您的具体查询是:

SELECT e.event_id, count(e.event_id), e.state, MIN(e.boot_time) AS boot_time, 
      e.time_occurred, COALESCE(e.info, 0) AS info
FROM events AS e JOIN
     leg
     ON leg.id = e.leg_id "
GROUP BY e.event_id 
ORDER BY leg.num_leg DESC, e.event_id ASC;

如果
e.event\u id
events
中的主键,那么ANSI标准甚至支持此语法,因为
event\u id
足以唯一地定义
events

中一行中的其他列,如果
e.event\u id
是表的主键或唯一键,则
e.time\u accurrent
称为“功能相关”,甚至不会在其他符合SQL的DBMS中引发错误

然而,SQLite并没有实现功能依赖性。对于SQLite(和MySQL),即使对于功能上不依赖于GROUPBY列的列,也不会抛出错误


SQLite(和MySQL)只需从结果集中选择一个随机行来填充(用SQLite术语)“裸列”,请参见。

如果
e.event\u id
是表的主键或唯一键,则
e.time\u occurrent
称为“功能相关”,甚至不会在其他符合SQL的DBMS中引发错误

然而,SQLite并没有实现功能依赖性。对于SQLite(和MySQL),即使对于功能上不依赖于GROUPBY列的列,也不会抛出错误


SQLite(和MySQL)只需从结果集中随机选择一行来填充(用SQLite的行话)“裸列”,请参见。

这是SQLite和MySQL的一个“特性”。在MySQL中,您可以通过服务器中的严格模式设置来纠正这一点。也许在SQLite中也是…好吧。。。你能详细说明这个特性的预期系统行为吗?这是SQLite和MySQL的一个“特性”。在MySQL中,您可以通过服务器中的严格模式设置来纠正这一点。也许在SQLite中也是…好吧。。。您能否详细说明此功能的预期系统行为?