2017-10-18 73 views
1

我在SQLITE DB中有两个表(表1和表2)。我需要确定表1中的哪些项目不在表格2中,然后打印结果。我想我可能有一个工作原型,但对SQL不太熟悉。SQLITE DB表差异

import sqlite3 

sqlite_file = 'data.db' 
conn = sqlite3.connect(sqlite_file) 
c = conn.cursor() 


c.execute("SELECT PK FROM Table1 WHERE NOT EXISTS(SELECT 1 FROM Table2 WHERE PK = Table1.pk)") 
results = list(c) 
count = len(results) 


print(results) 
print(count) 
  • 有人可以证实,这看起来对吗?
  • 有没有更好的方法来做到这一点?如果没有,任何帮助将不胜感激

回答

1

我认为你是几乎没有

import sqlite3 

sqlite_file = 'data.db' 
conn = sqlite3.connect(sqlite_file) 
c = conn.cursor() 

#using a NOT IN is better than the NOT EXISTS 
#it gets straight to what you are looking for 

c.execute("SELECT col1 FROM Table1 WHERE col1 NOT IN (SELECT col1 FROM Table2)") 
results = list(c) 
count = len(results) 

print(results) 
print(count) 

当他们在这个answer说,EXISTS会告诉你一个查询是否返回任何结果为IN用于比较一个值和几个值,并且可以使用文字值。

+0

谢谢!并感谢解释“不在”与“存在”,现在它是完全合理的。 – grigs

+0

一个简单的问题,如果我想显示整行而不是简单的col1,我该怎么写呢? – grigs

+0

hi @grigs,如果你在WHERE条件中使用col1,我会做这样的事情'SELECT * FROM table1 WHERE col1 NOT IN(SELECT col1 FROM Table2)''。如果要确定它们是数据,而不是专门的列,我会这样做'SELECT * FROM table1 WHERE NOT EXISTS(SELECT col1 FROM Table2)' –