2014-12-04 153 views
0

我有兩個表:MYSQL連接表

  1. 部件 - 主鍵:熙
  2. 元素 - 主鍵:開齋節,外鍵:熙,其他領域:Companyid和Yearid

我需要一個連接查詢一些建議:

SELECT Cid, Eid 
FROM Component 
JOIN Element ON Cid=Eid 
WHERE (Cid = X and Companyid=Y and Yearid = Z) 

我想返回所有組件行和僅填充它們存在的元素字段,以及它們是否存在於特定的公司和年份。

在上面的語句中,如果Element表中沒有條目,則Companyid和Yearid的條件返回零行。

非常感謝

+0

創建只有1個字段的表?你在開玩笑嗎? – Edrich 2014-12-04 08:48:32

+0

@edrich - 有幾個字段,我想了解我一直在努力的查詢結構。 – Stew 2014-12-04 09:03:41

回答

0

您需要使用LEFT JOIN得到第一表中的行沒有第二個表匹配的行。另外,必須在ON條款中完成對第二個表格的任何過濾。否則,來自不存在的行的NULL值將會通過WHERE測試失敗,並從結果中刪除這些行。所以它應該是:

SELECT Cid, Eid 
FROM Component 
LEFT JOIN Element ON Cid = Eid AND Companyid=Y and Yearid = Z 
WHERE Eid = X 
+0

它返回元素記錄的所有組件記錄和Nulls是正確的,組件記錄需要根據Cid標準進行過濾,我是否應該將這些記錄添加到WHERE標準中? – Stew 2014-12-04 08:55:25

+0

是的,我在我的回答中糾正了這個錯誤 – Barmar 2014-12-04 09:01:26

+0

既然'Cid = Eid',你應該過濾'Eid'。 – Barmar 2014-12-04 09:02:56

0
SELECT Cid, Eid 
FROM Component 
LEFT JOIN Element ON Cid = Eid 
WHERE (Cid = X and Companyid=Y and Yearid = Z) 
+0

仍然返回無結果,元素當前是空表 – Stew 2014-12-04 08:49:45

+0

只需發送表格腳本。在元素表中,您應該有ComponentId列如果youtry匹配元素組合與元素它不起作用:) – 2014-12-04 09:27:53

+0

你想通了...... :) – 2014-12-04 09:31:16