【问题标题】:For Python/MySQL, how do you perform a SELECT query on previous results?对于 Python/MySQL,如何对以前的结果执行 SELECT 查询?
【发布时间】:2017-01-31 08:23:32
【问题描述】:
myConnection = mysql.connector.connect(user = 'myuser', password = 'mypass', host = 'localhost', database = 'mydatabase')

# Cursor for the connection
myCursor = myConnection.cursor()   

# Assume namecolumn is a valid column...
myQuery = "SELECT * FROM mytable WHERE name = Erik"
myCursor.execute(myQuery)

# Now here, do another SELECT, but only on the results that are in myCursor

所以,假设您有一个名为“mytable”的表。该表还有一个名为“名称”的列。还可以说,“name”列有多个名为“erik”的人。

我要问的是,在执行第一个 SELECT 查询之后,是否可以执行另一个 SELECT 查询,但只能针对第一个查询的现有结果?如果这是可能的,怎么做?基本上,我只是想用 SELECT 反复过滤结果。

谢谢。

【问题讨论】:

  • 那么您想对第一个查询的结果运行相同的查询吗?
  • 假设有更好的方法来提问meta.stackoverflow.com/questions/333952/…
  • 我认为您真正想做的是在一组上运行多个过滤器,而不是运行 select 以重复运行越来越小的结果。只需将 and 和/或 or 语句添加到您的 SELECT 子句中

标签: python mysql filtering


【解决方案1】:

要么在原始查询中添加“and...”,要么从第一个查询中创建一个 id 列表,然后选择“where id in (...)”,其中 ... 是由第一个查询。

【讨论】:

  • 我一直问自己的事情。逗号分隔列表何时变得太大而无法在where id in (...) 过滤器中使用?有上限吗?
  • 如果有硬编码限制,我从来没有遇到过。它不是特别快速或高效,但它使用与部分查询返回的大量结果集相同的内部结构,因此不应该成为问题。
【解决方案2】:

也许在 WHERE 子句中尝试多个条件?

SELECT * FROM mytable WHERE name = 'Erik' AND born = 1990

【讨论】:

    【解决方案3】:

    这是你需要的吗?

    myQuery = "SELECT * 
               FROM mytable
               WHERE name = 'Erik' 
               AND id in (SELECT DISTINCT id
                          FROM mytable)"
    

    获取不同的id 或您选择的任何其他列将过滤记录,这样您就可以避免同一个人的多个记录。鉴于您的问题有点模糊,很难给出具体的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-31
      • 2023-02-07
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 2021-04-01
      • 1970-01-01
      相关资源
      最近更新 更多