2017-10-07 78 views
0

這是否意味着這種加入工作就像一對一的關係?通過引用完整性連接表?

免得考慮下表:

Table 1 Table 2 
________ ________ 
id name id name 
1 O  1 T 
2 B  1 N 

SELECT Table 1.name, Table 2.name FROM Table 1, Table 2 WHERE Table 1.id = Table 2.id 

會回到這只是最後的行1 N爲參加行?

1 O => 1N 

它是如何工作的,如果第二個表具有相同的鍵id。這是否需要以前的最後一次同意?

+0

它會給你1 O => 1T和1 O => 1N。將它作爲{(1,0)}和{(1,T),(1,N)}之間的笛卡爾積處理} –

+1

[踢壞的惡習:使用舊式JOIN](http://sqlblog.com/blogs /aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx) –

回答

0

name1, name2 
O , T 
O , N 

您可以在下面的SO問題找到各種連接類型更寬泛的描述從不FROM條款中使用逗號。 總是使用正確的,明確的JOIN語法。您的查詢應寫爲:

SELECT t1.name, t2.name 
FROM Table1 t1 JOIN 
    Table2 t2 
    ON t1.id = t2.id; 

JOIN返回所有匹配的行。沒有「第一」或「最後」行的SQL概念。 SQL表格代表無序集合。

這很容易檢查。 Here是演示結果的SQL小提琴。

0

只是一個關於「約定」,可能會幫助你更好地瞭解「ID」的說明。

「id」(,通用約定)是一個自動編號的整數,可用於唯一地定位該表中的特定行。

每個表格(按照常規約定)都會有自己的「id」列,但這並不意味着您總是通過這些列加入。

表2很可能包含一個「外鍵」,使一個連接到Table

一個「外鍵」欄(通過共同約定)的命名往往是「表名」 &的組合下劃線&「id」。因此,一個可能的修訂,以你的例子是這樣的:

Table1  Table2 
________ ________________________ 
id name id table1_id name 
1 O  1000   1 T 
2 B  9678   1 N 

注意從表1的ID是如何在這個例子中,以表2的ID沒有關係,所以查詢現在是:

SELECT t1.name, t2.name 
FROM Table1 t1 
INNER JOIN Table2 t2 ON t1.id = t2.table1_id; 

加盟堅持指定的邏輯,這裏是t1.id must equal t2.table1_id。在邏輯中沒有「最後」的「第一個」。任何符合指定條件的行都會加入。(注:&這可能意味着沒有行獲得加入視情況而定)


從字後不使用表名之間的逗號。習慣於諸如INNER JOIN,LEFT OUTER JOIN(或它們的縮寫JOIN和LEFT JOIN)這樣的術語,這只是在長期的中好得多。