2017-10-18 71 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)' –