Python+SQLite3技术问询:筛选多供应商可获取的part1
解决SQLite多供应商part1筛选问题
嘿,我来帮你搞定这个需求!根据你提供的parts表结构和数据,我们可以通过针对性的SQL查询来实现目标,下面分两种场景给出方案,再结合Python代码示例:
场景1:输出符合条件的part1及对应供应商
如果需要得到像a, Foo、a, Bar这样的完整记录,可以用嵌套查询:先找出那些有多个不同供应商的part1,再筛选这些part1的所有相关记录:
SELECT part1, supplier FROM parts WHERE part1 IN ( SELECT part1 FROM parts GROUP BY part1 HAVING COUNT(DISTINCT supplier) > 1 ) ORDER BY part1, supplier;
关键说明:这里用COUNT(DISTINCT supplier)而不是直接COUNT(supplier),是因为同一个part1可能在同一个供应商下有多个part2的记录,我们要统计的是不同供应商的数量,而非总记录数,这样才不会误判。
场景2:仅输出符合条件的part1(如a、c)
如果只需要得到有多个供应商的part1列表,直接用分组统计即可:
SELECT DISTINCT part1 FROM parts GROUP BY part1 HAVING COUNT(DISTINCT supplier) > 1 ORDER BY part1;
结合Python的实现代码
把上面的SQL语句嵌入Python的SQLite3操作中,示例代码如下:
import sqlite3 # 连接到你的SQLite数据库(替换为实际路径) conn = sqlite3.connect('your_database.db') cursor = conn.cursor() # 场景1:获取完整的part1和供应商记录 print("=== 完整记录 ===") cursor.execute(""" SELECT part1, supplier FROM parts WHERE part1 IN ( SELECT part1 FROM parts GROUP BY part1 HAVING COUNT(DISTINCT supplier) > 1 ) ORDER BY part1, supplier; """) for row in cursor.fetchall(): print(f"{row[0]}, {row[1]}") # 场景2:仅获取符合条件的part1 print("\n=== 仅part1列表 ===") cursor.execute(""" SELECT DISTINCT part1 FROM parts GROUP BY part1 HAVING COUNT(DISTINCT supplier) > 1 ORDER BY part1; """) for part in cursor.fetchall(): print(part[0]) # 关闭数据库连接 conn.close()
运行这段代码后,就能得到你想要的两种结果啦~
内容的提问来源于stack exchange,提问作者Vera
相关产品推荐
相关产品推荐

