如何订购sqlite操作

时间:2018-01-26 06:25:34

标签: python mysql sqlite

我在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转移到其他地方吗?

1 个答案:

答案 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();。这个顺序有一个原因,即数据库通常按照您看到它们的顺序评估每个子句。