子表与父表的内部连接

时间:2014-02-12 22:37:28

标签: sql select sqlite inner-join

我有两个表,通过外键关联。我想根据父表中某行的一些信息从子表中选择一列。

表的定义是:

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。

3 个答案:

答案 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')