2015-12-21 17 views
-1

嘗試進行從一個表中提取的查詢,條件是該表的項目上的唯一ID在其他表的相關ID列中找到。SQL Server - SELECT WHERE三個獨立表上的三列是相等的嗎?

下面是我在做什麼現在:

SELECT * FROM Table1 
inner join Table2 ON Table1.ID = Table2.Table1ID 
inner join Table3 ON Table1.ID = Table3.Table1ID 
WHERE Table1.ID = Table2.Table1ID and Table1.ID = Table3.Table1ID 

例如,假設你是一名醫生,表1是患者遇到的列表。表2是患者診斷的列表,表3是患者治療的列表。 Table1和Table2上的項目將始終具有Table1ID,但Table1上的項目可能並不總是在Table2或Table3上具有相應的項目。

一邊,有沒有辦法做一個三重平等?如...

WHERE Table1.ID = Table2.Table1ID = Table3.Table1ID 
+0

你只需要把條件三次。例如。 T1.id = t2.id和t1.id = t3.id和t2.id = t1.id.希望很明顯。 – MaxPD

+8

您的加入完成了此操作。平等是傳遞性的。 'where'子句是不必要的。 –

+0

專注於你的問題的這一部分「Table1上的_items可能並不總是在Table2或Table3_上有相應的項目」,如果你在表3中可能沒有匹配的數據,那麼答案是(可能)使用'LEFT OUTER JOIN '而不是'INNER JOIN'。 – Turophile

回答

0

對於這個特定的問題,你只是不需要where條件 - 聯接條件已經滿足它:

SELECT  * 
FROM  Table1 
INNER JOIN Table2 ON Table1.ID = Table2.Table1ID 
INNER JOIN Table3 ON Table1.ID = Table3.Table1ID 

作爲一個一般性的問題,一個巧妙的方法是檢查多個值是否相等是檢查最小是否等於最大:

LEAST(a, b, c, d, e) = GREATEST(a, b, c, d, e)