[英]Inner join of child table with parent table
我有兩個表,由一個外鍵關聯。 我想根據有關父表中某一行的一些信息從子表中選擇一列。
這些表的定義是:
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');
這兩種嘗試都列出了Location表中direc列中的所有條目。 我正在使用sqlite。
您可能丟失了join命令的一部分,該部分告訴sqllite如何合並表,因此您將獲得笛卡爾聯接。
SELECT direc FROM Location
INNER JOIN Runs
ON location.rid = Runs.id WHERE Runs.name = '012114';
假設location.rid是運行的引用,這應該可以工作。
當您執行JOIN
子句時,您需要指定每個表上要JOIN
列。
例如:
SELECT direc
FROM Location
INNER JOIN Runs ON Runs.id = Location.rid
WHERE Runs.name = '012114';
沒有這個,您將返回非常意外的結果。
如果您不使用運行表中的列,則可獲得解決方案的其他方法。 例如:
SELECT
direc
FROM
Location loc
WHERE
Exists (SELECT NULL
FROM Runs ru WHERE ru.id = loc.rid AND ru.name = '012114')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.