簡體   English   中英

子表與父表的內部聯接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM