我们正在为我们的数据库模式添加一个表。它与已经存在的表格有关系,我们为其添加了一个外键。请注意,我没有创建这个模式,也没有改变太多的权限。该应用程序已经运行了一段时间,他们犹豫改变很多。SQL左加入两个可能的列
USER_ACTIVITY_T(preexisint表 - 唯一的相关列简称)
- ACTIVITY_ID(PK)
- 用户名
- 设备ID(FK - 最近添加)
MACHINE_T(新表)
- machineid(pk - 自动递增)
- 计算机名(唯一)
从我加入到机台点,它收集机器数据;让用户看到活动期间涉及哪些机器。这很有用,但它只显示实施数据。一位领导问我试图通过参考与机器相关联的用户名来填充先前存在的记录。我们知道这不是100%准确的,但是...是的。我们的想法是将用户名添加到MACHINE_T中,并以追溯方式在报告中填充机器名称(假定用户只使用一台机器并且从未更改其用户名)。
那么,新MACHINE_T表看起来像:
MACHINE_T(新表)
- 设备ID(PK - 自动递增)
- 计算机名(唯一)
- 用户名
现在,我们目前的SQL是:
SELECT * FROM `USER_ACTIVITY_T` LEFT JOIN `MACHINE_T`
ON MACHINE_T.machineid=USER_ACTIVITY_T.machineid
如果USER_ACTIVITY_T.machineid为空但具有匹配的用户名,任何人都有关于如何加入用户名的建议?对不起。这是一个奇怪的要求,我可能花费太多时间进行过度分析。感谢您的任何帮助。我几乎想要说它可以合理完成。
'SELECT * FROM USER_ACTIVITY_T LEFT JOIN MACHINE_T ON MACHINE_T.machineid = USER_ACTIVITY_T.machineid WHERE USER_ACIVITY_T.machineid IS NOT NULL'如果** ** MACHINE_T.machineid不为空,所以这是一个INNER JOIN LEFT OUTER代替JOIN你可以切断where子句 – jean
是真的。我复制了粘贴原始查询并添加了忽略连接的子句。我将编辑答案以反映这 – Anton
实际上,左连接无论如何都在做这项工作。我会澄清 – Anton