python - 如何订购sqlite操作

标签 python mysql sqlite

我在使用 Python 中的 sqlite 时遇到了一些问题。我有两个连接表,table1 和 table2,连接在 'id' 上。以下一系列 bool 值出现在我的 WHERE 子句中:

...WHERE (table2.word IN ('grapes', 'cherries') GROUP BY
table1.id HAVING COUNT(*) = 2) AND table1.taste = 'sour';

更具体地说,我试图获取 table2 中出现的所有同时具有“葡萄”和“樱桃”作为单词的事件,但不必使用不同的名称两次加入 table2。这就是为什么我使用 IN,然后使用 GROUP BY 和 HAVING COUNT(*) = 2 来隔离出现次数正好等于我要匹配的水果数量的情况。

但是,我收到以下错误:

OperationalError: near "group": syntax error

我已将问题与括号在第一个 bool 值中的工作方式隔离开来,并且已经尝试了几个小时来找出原因。当我取出第二个 bool 值“AND table2.taste = 'sour'”时,整个查询工作正常。我应该将 GROUP BY 转移到其他地方吗?

最佳答案

您的查询顺序可能应该是这样的:

WHERE
    table1.word IN ('grapes', 'cherries') AND
    table2.taste = 'sour'
GROUP BY
    table1.id
HAVING
    COUNT(DISTINCT table1.word) = 2;

WHERE 出现在 GROUP BY 之前,后者又出现在 HAVING 之前。采用这种顺序是有原因的,因为数据库通常会按照您看到它们的顺序来评估这些子句中的每一个。

关于python - 如何订购sqlite操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48456626/

相关文章:

python - 在 Django 中为单个产品创建页面

MySQL 查询不在 cronjob 内运行

php - 在 UPDATE 查询中绑定(bind)参数时出现 PDO 异常

mysql - 如何在mysql中使用INNER JOIN从两个表中删除行?

Android json插入到sqlite中的数据过多

python - 如何在 Python-RQ 中创建多个 worker?

python - Pandas Dataframe 选择具有最小基数的组

python - Windows 上的 Tensorflow 对象检测 API - 错误 "ModuleNotFoundError: No module named ' utils'”

sqlite - 虚拟表中的记录顺序不正确

sqlite - 应用程序在切换到 Postgres 后停止工作