SQLITE DB表差异
问题描述:
我在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)
- 有人可以证实,这看起来对吗?
- 有没有更好的方法来做到这一点?如果没有,任何帮助将不胜感激
答
我认为你是几乎没有
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
用于比较一个值和几个值,并且可以使用文字值。
谢谢!并感谢解释“不在”与“存在”,现在它是完全合理的。 – grigs
一个简单的问题,如果我想显示整行而不是简单的col1,我该怎么写呢? – grigs
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)' –