2017-04-05 112 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';”现在我得到了我期望的结果。除了更好地理解你的数据之外,这里可能没什么可学的。