我有两个表,通过外键关联。我想根据父表中某行的一些信息从子表中选择一列。
表的定义是:
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。
答案 0 :(得分:2)
您可能缺少join命令的一部分,告诉sqllite如何合并表,因此您将获得一个笛卡尔联接。
SELECT direc FROM Location
INNER JOIN Runs
ON location.rid = Runs.id WHERE Runs.name = '012114';
这应该有效,假设location.rid是指运行。
答案 1 :(得分:1)
执行JOIN
子句时,需要指定要加入的每个表上的哪些列。
例如:
SELECT direc
FROM Location
INNER JOIN Runs ON Runs.id = Location.rid
WHERE Runs.name = '012114';
如果没有这个,你可以返回意想不到的结果。
答案 2 :(得分:0)
如果您不使用“运行表”中的列,则获取解决方案的其他方法。 例如:
SELECT
direc
FROM
Location loc
WHERE
Exists (SELECT NULL
FROM Runs ru WHERE ru.id = loc.rid AND ru.name = '012114')