2011-11-05 3 views
0

Assez nouveau pour sqlite (et sql). Pour chaque ligne d'une table, j'aimerais faire une requête et l'ajouter à une autre table. Mon plan actuel est d'extraire tous les éléments dans un vecteur <> et de faire un appel à sqlite pour chaque élément dans le vecteur <>. Cela peut-il être fait à travers une seule déclaration sqlite? en c/C++. Merci d'avance. Edit: Une idée que j'ai est de faire un trigger sur une nouvelle table. Pour chaque nouvelle ligne ajoutée, le déclencheur l'utilisera ensuite pour créer une requête pour cette ligne.requête sqlite par ligne

Exemple:

create table Persons(Id, FirstName, LastName); 
create table ParentChildren(PersonsIdParent, PersonsIdChild); 

Pour chaque personne, créer une liste de tous les enfants possibles (par exemple même de nom), et ajouter à ParentChildren.

Répondre

3

Oui, vous pouvez faire ce genre de chose sans quitter la base de données:

insert into table1 (column11, column12, ...) 
select column21, column22, ... 
from table2 
where ... 

La requête qui alimente l'insertion peut être aussi compliqué que nécessaire aussi longtemps que les colonnes sélectionnées ont les bons types.


Maintenant que nous savons ce que vos tables ressemblent, il vous suffit de joindre les personnes à se:

insert into ParentChildren (PersonsIdParent, PersonsIdChild) 
select p.Id, c.Id 
from Persons p 
join Persons c on p.LastName = c.LastName 
where p.Id <> c.Id 

Vous pouvez joindre à une table se aussi longtemps que vous utilisez des alias uniques. La condition p.Id <> c.Id est nécessaire pour éviter d'essayer de faire de quelqu'un son propre enfant.

+0

Cela répond partiellement. Je ne connais toujours pas la syntaxe pour faire une requête par ligne que j'ai sélectionnée, disons, table2. Je vous remercie. – jobobo

+0

@jobobo: Peut-être que vous pourriez inclure vos tables et ce que vous essayez de sélectionner dans votre question. –

+0

J'ai mis à jour la question ci-dessus avec l'exemple Persons and ParentChildren. Merci encore. – jobobo

1

Ce que vous demandez juste des liens chaque personne à toute autre personne du même Lastname (j'exclus rejoindre à soi-même):

INSERT INTO PersonsChildren 
SELECT p.Id, c.id 
FROM Persons p 
JOIN Persons c USING (LastName) 
WHERE p.Id <> c.Id 
ORDER BY 1,2 

Les informations peuvent être récupérées tout moment avec la requête SELECT utilisée. Pas besoin immédiat d'une entrée redondante dans PersonsChildren. Sauf qu'il n'y a plus au problème ..