2017-05-26 1 views
0

J'ai deux tables simples:SQLite Sélectionnez avec JOIN du même parent

Noms:

+----+-------------+ 
| id | Name  | 
+----+-------------+ 
| 1 | John Smith | 
| 2 | Joe Doe  | 
+----+-------------+ 

Relations:

+----+----------+---------+ 
| id | ParentID | ChildID | 
+----+----------+---------+ 
| 1 |  1 |  2 | 
+----+----------+---------+ 

La relation de table, parent est clé étrangère aux noms et aux L'enfant est la clé étrangère des noms.

Existe-t-il un moyen de sélectionner et de remplacer ParentID et ChildID avec Name from Names où number correspond à Names.id?

+0

S'il vous plaît fournir la '.dump 'à partir de l'outil de ligne de commande SQLite pour une base de données de jouets adaptée. – Yunnosch

+0

CREATE noms TABLE ( id INTEGER PRIMARY KEY ASC AUTOINCREMENT UNIQUE NOT NULL, Nom VARCHAR (255) COLLATE NOCASE NOT NULL UNIQUE ); ' CREATE Relations TABLE ( id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL, Parent ENTIER NOT NULL RÉFÉRENCES Names (id), enfant integer REFERENCES noms (id) NOT NULL ); ' – adiDX

+0

Je vois qu'il y avait une divergence, ce que j'ai écrit dans la question et ce qui est réellement dans le ** DB = Relations [id, parent, enfant] ** pas _Relations [id, ParentID, ChildID] _ mais la question est toujours le même;) – adiDX

Répondre

0

Vous pouvez joindre à la même table plusieurs fois, aussi longtemps que vous donnez chaque fois un nom unique:

SELECT Parent.Name, 
     Child.Name 
FROM Relations 
JOIN Names AS Parent ON Relations.ParentID = Parent.ID 
JOIN Names AS Child ON Relations.ChildID = Child.ID; 

Vous pouvez également utiliser simplement: les sous-requêtes

SELECT (SELECT Name FROM Names WHERE id = Relations.ParentID) AS ParentName, 
     (SELECT Name FROM Names WHERE id = Relations.ChildID) AS ChildName 
FROM Relations; 
+0

Cheers CL, la deuxième option a travaillé le régal. Je viens d'essayer d'une autre façon (à partir de MySQL InnoDB): 'CREATE TABLE TestTable (id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE, ParentId INTEGER, ParentName VARCHAR (255), ChildId INTEGER, ChildName VARCHAR (255), FOREIGN KEY (ParentId, ParentName) REFERENCES Noms (ID, nom) SUR UPDATE CASCADE, FOREIGN KEY (ChildId, ChildName) REFERENCES Noms (ID, nom) ON UPDATE CASCADE); ' mais lorsque j'essaie d'insérer: ' INSERT INTO TestTable (ParentID, ParentName, ChildId, ChildName) values ​​(1, "John Smith", 2, "Joe Doe") ' J'ai une erreur:' foreign discordance'' – adiDX

+0

Pour poser une question, utilisez le bouton "Poser une question". Et s'il vous plaît prendre le [tour] (https://stackoverflow.com/tour). –