2014-02-12 82 views
0

我有兩個表,通過外鍵關聯。我想根據父表中某行的某些信息從子表中選擇一列。子表與父表的內部連接

表的定義是:

CREATE TABLE Runs(
    id   INTEGER, 
    name   TEXT UNIQUE NOT NULL, 
    rundate  TEXT NOT NULL, 
    PRIMARY KEY (id) 
); 


CREATE TABLE Location(
    lid   INTEGER, 
    rid   INTEGER NOT NULL, 
    direc   TEXT NOT NULL, 
    PRIMARY KEY (lid), 
    FOREIGN KEY (rid) REFERENCES Runs(id) 
); 

我新的SQL,所以我還沒有完全想通了,如何做到這一點。這是我迄今爲止(假設我想命名爲012114運行的目錄:

SELECT direc FROM Location INNER JOIN Runs WHERE Runs.name = '012114'; 

我也試過

SELECT direc FROM Location INNER JOIN (SELECT * FROM Runs WHERE Name = '012114'); 

兩次努力都列出了從直銷列的所有條目在位置表。我使用的SQLite。

+0

您實際上並未加入。你需要像ON運行那樣的東西。 =地點。 '。 – Andrew

回答

2

你可能會丟失,你告訴sqllite如何合併表的連接命令的一部分,所以你得到一個笛卡兒連接。

SELECT direc FROM Location 
    INNER JOIN Runs 
    ON location.rid = Runs.id WHERE Runs.name = '012114'; 

這應該工作,假設location.rid是指運行。

1

當您執行JOIN子句時,您需要指定每個表上要加入的列。

例如:

SELECT direc 
FROM Location 
INNER JOIN Runs ON Runs.id = Location.rid 
WHERE Runs.name = '012114'; 

做不到這一點,你可以返回相當意外的結果。

0

如果您未使用運行表中的列,則可以使用其他方法獲取解決方案。 例如:

SELECT 
    direc 
FROM 
    Location loc 
WHERE 
    Exists (SELECT NULL 
FROM Runs ru WHERE ru.id = loc.rid AND ru.name = '012114')