我在Python中使用sqlite时遇到了一些问题。我有两个连接表,table1和table2,加入'id'。以下系列的布尔值出现在我的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
我已将问题与我的括号在第一个布尔值中的工作方式隔离开来,并且已经尝试了几个小时来找出原因。当我拿出第二个布尔“AND table2.taste ='sour'”时,整个查询工作得很好。我应该将GROUP BY转移到其他地方吗?
答案 0 :(得分:0)
您的查询顺序应该是这样的:
WHERE
table1.word IN ('grapes', 'cherries') AND
table2.taste = 'sour'
GROUP BY
table1.id
HAVING
COUNT(DISTINCT table1.word) = 2;
WHERE
出现在GROUP BY
之前,而HAVING
之前是.DataBind();
。这个顺序有一个原因,即数据库通常按照您看到它们的顺序评估每个子句。