2017-05-26 157 views
0

加入我有兩個簡單的表:SQLite的選擇與同一母公司

名稱:

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

關係:

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

表關係,家長是外鍵的名稱和孩子是外國人的名字。

有沒有一種方法來選擇和替換ParentID和ChildID與姓名的名稱,其中數字匹配Names.id?

+0

請提供'使用.dump '從SQLite命令行工具中獲取合適的玩具數據庫。 – Yunnosch

+0

'CREATE TABLE名稱( ID INTEGER PRIMARY KEY ASC AUTOINCREMENT UNIQUE NOT NULL, 名稱VARCHAR(255)COLLATE NOCASE NOT NULL UNIQUE );' 'CREATE TABLE關係( ID INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL, 父INTEGER NOT NULL 參考名稱(id), 子INTEGER參考名稱(id) NOT NULL ); ' – adiDX

+0

我看到有一個差異,我在問題中寫了什麼,以及** DB = Relations [id,Parent,Child] **中的實際是什麼**而不是_Relations [id,ParentID,ChildID] _但問題是仍然一樣;) – adiDX

回答

0

您可以用同一個表多次加入,只要你給一個惟一的名稱:

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; 

或者,簡單地使用子查詢:

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

乾杯CL,第二選擇工作的治療。我嘗試了另一種方式(從MySQL InnoDB): CREATE TABLE TestTable(INT INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,ParentId INTEGER,ParentName VARCHAR(255),ChildId INTEGER,ChildName VARCHAR(255),FOREIGN KEY(ParentId,ParentName )參考名稱(id,Name)ON UPDATE CASCADE,FOREIGN KEY(ChildId,ChildName)參考名稱(id,Name)ON UPDATE CASCADE);' 但是當我嘗試插入時: INSERT INTO TestTable(ParentID,ParentName, ChildId,ChildName)值(1,「John Smith」,2,「Joe Doe」)' 我有一個錯誤:'外鍵不匹配' – adiDX

+0

要問一個問題,請使用「Ask Question」按鈕。請參閱[遊覽](https://stackoverflow.com/tour)。 –