2009-11-27 8 views
0

J'ai deux tables. Première:SQLite - comment écrire une jointure correcte?

create table history (id integer primary key, task integer) 

Et seconde:

create table task (id integer primary key, name text) 

Quelle sera une requête SQLite qui renvoie une liste de history.id et task.name où history.task == task.id (tous les éléments de la table 'history' avec la table 'name' de 'task')?

Répondre

2
SELECT history.id, task.name 
    FROM history 
    INNER JOIN task 
    WHERE history.task = task.id 

Utilisez un LEFT JOIN si vous n'êtes pas sûr que la tâche sera présente pour une ligne particulière dans l'histoire - nulls seront retournées si la ligne est manquante .

La syntaxe pour SELECT est décrite here (en utilisant des images).

+0

Quelle est la différence entre la jointure interne et la jointure gauche dans mon cas? – grigoryvp

+0

Si vous souhaitez uniquement que les lignes retournées contiennent un historique et une tâche, vous devez utiliser INNER JOIN. Si cela ne vous dérange pas de récupérer des lignes qui ont un historique mais pas de tâche, utilisez un LEFT JOIN. –

1

Effectuez les opérations suivantes:

SELECT history.id, task.name FROM history LEFT JOIN task ON history.task = task.id 
+0

Quelle est la différence entre jointure interne et jointure gauche dans mon cas? – grigoryvp

+0

Une jointure à gauche affichera tous les identifiants d'historique, que la ligne ait ou non une tâche correspondante. Une jointure interne montrera seulement où les deux sont présents. –

+0

Ah, c'est les règles d'intersection, merci :) – grigoryvp

Questions connexes