我是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)
答案 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来解决