2017-04-05 34 views
-1

對不起。這裏有一百萬個帖子。不知何故,我仍然錯過了一些東西。簡單的內部連接就像這樣: http://www.w3resource.com/mysql/advance-query-in-mysql/inner-join-with-multiple-tables.phpmysql內部連接不按預期方式工作

無知是什麼問題。試圖將該組織添加到機器記錄中。 我希望如果user_name上沒有匹配,機器記錄將被丟棄,但不管怎樣,< =機器中的記錄數。獲得倍數。 Machines.machine_name和user_name在機器中並不是唯一的,因爲每臺機器都有多個軟件包被跟蹤。

選擇users2.org,machines.User_name,machines.Machine_name,machines.model,machines.program,machines.version 從機內連接users2上users2.user_name = machines.User_name

+0

啊,多一個。這有點簡化,因爲machine_name表在machine_name上不唯一。實際上有10到50個具有相同機器名稱的記錄在機器上包括machines.program,machines.version用於軟件。我想要所有的機器記錄。 – jms333

+0

你能分享你的模式嗎? –

+0

描述機器; Machine_name | varchar(50), | User_name | varchar(21) |模型| varchar(50) |發行人| varchar(100) |程序| varchar(255) |版本| varchar(255) | product_ID | varchar(255) 描述了users2; | user_name | varchar(25) | org | varchar(5) – jms333

回答

0

你可能想聚集在這裏,因爲你會得到一個笛卡爾乘積爲所有共享user_name的機器:

select users2.org, 
     machines.User_name, 
     machines.Machine_name, 
     machines.model 
from machines 
inner join users2 on users2.user_name = machines.User_name 
GROUP BY users2.org, machines.User_name, machines.Machine_name, machines.model 
+0

在這裏得到一個笛卡爾產品。每個用戶應該有1臺機器。每個用戶/機器在機器表中應該有多個記錄。每個表中的某些記錄缺少實際的user_name,但它們具有缺省值,如'missing'。 – jms333

+0

是的,你需要'GROUP BY'來減少重複的值。你可以這樣做,就像我在我的答案中所做的那樣,在加入之前彙總'machines'表。 –

0

謝謝您的輸入。問題在於,按照某種方式處理數據時(user_name最初是電子郵件,另一個是Windows網絡ID),但兩個表中缺少的user_names已更改爲「'。這引起了我不期待的地方的連接匹配。缺少的user_name字段應該具有不同的默認值。我修復了機器表中的默認值,並將它們排除在「where machines.User_name <>'Unknown';」現在我得到了我期望的結果。除了更好地理解你的數據之外,這裏可能沒什麼可學的。