sqlite,使用动态键数过滤行,但前提是它们在特定列中的值相同?

时间:2019-02-16 09:18:20

标签: python sqlite

我是sqlite的新手(通常是数据库)。我在这里和其他地方都进行了大量阅读,无法找到此特定问题。人们倾向于想要计数或重复。我需要过滤。

我有一个包含3列(以及数十万个条目)的数据库

column1 column2 column3
abc     123     @#$
egf     456     $%#
abc     321     !@#
kop     123     &$%    
pok     321     ^$#

以此类推。

我想做的就是这个。我需要检索列表的所有可能组合。例如

[123, 321]

所有可能的连击都是

[123],[321],[123,321]

我不知道输入可能是什么,它可以超过2个字符串,因此组合列表可以快速增长。对于上面的单个条目,例如123、321,它无法正常工作,我要尝试使用的东西是列表中的值大于1。

所以我正在动态生成select语句

sqlquery = "SELECT fileloc, frequency FROM words WHERE word=?"
    while numOfVariables < len(list):
        sqlquery += " or word=?"
        numOfVariables += 1

这将生成查询,然后使用

执行查询
cursor.execute(sqlquery,tuple(list))

哪个工作。它会找到所有具有任何组合的行。

现在,我还需要一件事,如果它们的column1相同,则只需要选择它们(我不知道该值可能是多少)。

因此在上面的示例中,它将选择行1和3,因为它们的column2具有我感兴趣的值,并且它们的column1相同。但是,即使第4列具有我们想要的值,也不会选择。因为它的column1与321的column1不匹配。对于第5行,同样的事情,即使它是我们需要的值之一,也就是column1与123的值不匹配。

从我已经发现的东西中,人们可以使用GROUP BY与特定值进行比较。但就我而言,我不知道该值可能是多少。我只关心行之间是否相同。

很抱歉,如果我的解释不清楚。我本周之前从未使用过mysql,所以我不知道所有技术术语。

但是基本上我需要(伪代码)的功能:

if (column2 is 123 or 321) and 123.column1 == 321.column1:
       count
   else:
       dont count

我感觉这可以通过首先将匹配123或321的任何内容移到新表中来完成。然后遍历该表,仅保留具有相同column1值的123和321的记录。但是我不确定如何执行此操作,或者不确定它的正确方法吗?因为这件事将很快扩展,所以如果有5个输入,那么保留的行就是每个输入要占一行,并且它们的所有column1都相同。 (因此,行将以5组为一组保存。)

谢谢。

(我正在使用Python 2.7.15)

1 个答案:

答案 0 :(得分:0)

您写道:

  • “我需要检索列表的所有可能的组合

  • ”“我现在还需要一件事,仅当它们的 column1相同时,我才需要选择它们(我不知道这个值可能是什么)。

为此目的使用自我联接:

set DSKTOPDIR="D:\test"
set IPADDRESS="23.23.3.23"

>%DSKTOPDIR%\script.ftp ECHO cd %PAY_REP%
>>%DSKTOPDIR%\script.ftp ECHO mget *.report
>>%DSKTOPDIR%\script.ftp ECHO bye

:: run PSFTP Commands
psftp <domain>@%IPADDRESS% -b %DSKTOPDIR%\script.ftp

如果我想念您的问题,请纠正我,但这3行必须足够。

Python与您的问题无关。可以用纯SQL来解决