2017-10-18 4 views
1

J'ai deux tables dans un DB SQLITE (Tableau 1 et Tableau 2). J'ai besoin de déterminer quels éléments de la table 1 ne sont pas dans la table deux, puis imprimer les résultats. Je pense que je peux avoir un prototype fonctionnel, mais je ne connais pas trop SQL.Différences de tables 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) 
  • Quelqu'un peut-il confirmer que cela ressemble à droite?
  • Y a-t-il une meilleure façon de faire cela? Dans le cas contraire, toute aide serait appréciée

Répondre

1

Je pense que vous y êtes presque

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) 

Comme ils ont dit dans ce answer, EXISTS vous dira si une requête a retourné aucun résultat comme IN est utilisé pour compare une valeur à plusieurs et peut utiliser des valeurs littérales.

+0

Merci! Et merci d'expliquer le "NOT IN" vs "EXISTS", cela prend tout son sens maintenant. – grigs

+0

Une question rapide, si je voulais afficher la ligne entière plutôt que simplement col1, comment pourrais-je écrire cela? – grigs

+0

hi @grigs, si vous utilisez la col1 dans la condition WHERE, je ferais quelque chose comme ceci 'SELECT * FROM table1 O WH col1 NOT IN (SELECT col1 FROM Table2)'. Si vous voulez être sûr qu'ils sont des données, pas des colonnes en particulier, je le ferais 'SELECT * FROM table1 O WH NON EXISTS (SELECT col1 FROM Table2)' –