我使用SQLite 3在Python中实现这一点。 我有下表'parts',其中包含属性part1,part2和supplier。
part1 part2 supplier a j Foo b g Bar c d Nom a b Bar b k Bar c m Bar c l Foo
我想选择document
和part1
,如果supplier
可以从多个供应商处获得(或者只有一个供应商),则独立于part1
。
我要找的结果是:
a, Foo a, Bar c, Nom c, Bar c, Foo
或简单地说,a。 我不想要b,因为它只发生在Bar。
我试过了:
part2
结果是成对的co.execute("SELECT ar.part1,ar.supplier FROM parts ar, parts ts WHERE ar.part1 = ts.part1 AND ar.supplier != ts.supplier ")
for row in co.fetchall():
print(row)
和part1
,但只包括2个供应商,表格中有20个。
使用案例的答案暗示说明了特定供应商,例如供应商Bar and Foo或Bar and Nom发生的supplier
,但我有20多家供应商。
答案 0 :(得分:0)
使用分组计算每个零件的供应商数量:
SELECT part1
FROM parts
GROUP BY part1
HAVING COUNT(DISTINCT supplier) >= 2;
答案 1 :(得分:0)
我会使用exists
执行此操作:
select p.*
from parts p
where exists (select 1 from parts p2 where p2.part1 = p.part1 and p2.supplier <> p.supplier);
如果您只想要部分列表,那么我会推荐group by
和having
。但是你想要完整的行,所以exists
更适合你的用例。
答案 2 :(得分:0)
我认为你也可以尝试使用group by和具有以下功能的解决方案:
SELECT ar.part1, ar.supplier
FROM parts ar
WHERE ar.part1 NOT IN
(SELECT ar.part1
FROM parts ar
GROUP BY ar.part1
HAVING count(*) = 1)
GROUP BY ar.part1, ar.supplier
HAVING count(*) = 1
ORDER BY ar.part1, ar.supplier;