【问题标题】:sqlite, filter rows with dynamic number of keys, but only if they have the same value in a specific column?sqlite,过滤具有动态键数的行,但前提是它们在特定列中具有相同的值?
【发布时间】:2019-02-16 09:18:20
【问题描述】:

我是 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 个。

所以我是动态生成选择语句

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)

【问题讨论】:

    标签: python sqlite


    【解决方案1】:

    你写道:

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

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

    为此目的使用自联接:

    SELECT W1.column2, W2.column2 
       FROM words W1 
            JOIN words W2 ON W1.column1 = W2.column1
    

    如果我遗漏了您问题中的某些内容,请纠正我,但这 3 行必须足够。

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

    【讨论】:

      猜你喜欢
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多