sql-server – SQL Server:具有WHERE子句的多表连接
发布时间:2020-12-12 16:13:00 所属栏目:MsSql教程 来源:网络整理
导读:我正在使用SQL Server,我很难想从我想要的SELECT查询中获取结果.我尝试加入不同的订单和使用子查询,但没有什么是我想要的方式.拿这个具有不同版本级别的软件应用程序的例子,可能安装在人民币计算机上. 我需要执行一个附加的地方,但由于某种原因,我无法得到我
我正在使用SQL Server,我很难想从我想要的SELECT查询中获取结果.我尝试加入不同的订单和使用子查询,但没有什么是我想要的方式.拿这个具有不同版本级别的软件应用程序的例子,可能安装在人民币计算机上.
我需要执行一个附加的地方,但由于某种原因,我无法得到我想要的结果. 也许我正在看我的数据错误,我不太确定为什么我不能让这个工作. 申请表 ID Name 1 Word 2 Excel 3 Powerpoint 软件表(包含不同应用程序的版本信息) ID ApplicationID Version 1 1 2003 2 1 2007 3 2 2003 4 2 2007 5 3 2003 6 3 2007 软件计算机连接表 ID SoftwareID ComputerID 1 1 1 2 4 1 3 2 2 4 5 2 电脑桌 ID ComputerName 1 Name1 2 Name2 我想要一个查询,我可以运行我选择一个特定的计算机来显示什么软件版本和应用程序,但我也希望它显示什么应用程序它没有(版本将是一个空的,因为它没有那个软件就可以了) SELECT Computer.ComputerName,Application.Name,Software.Version FROM Computer JOIN Software_Computer ON Computer.ID = Software_Computer.ComputerID JOIN Software ON Software_Computer.SoftwareID = Software.ID RIGHT JOIN Application ON Application.ID = Software.ApplicationID WHERE Computer.ID = 1 我想要以下结果集 ComputerName Name Version Name1 Word 2003 Name1 Excel 2007 Name1 Powerpoint NULL 但我只是得到 Results ComputerName Name Version Name1 Word 2003 Name1 Excel 2007 我认为RIGHT JOIN将包括应用程序表中的所有结果,即使它们与计算机无关.我缺少/做错了什么? 解决方法使用LEFT JOIN或RIGHT JOIN时,无论您将滤镜放在“WHERE”还是“JOIN”中,都有所不同.看到这个答案我刚才写的一个类似的问题: 简而言之: >如果把它放入WHERE子句(就像你所做的那样),与该计算机无关的结果被完全过滤掉>如果你把它放在JOIN中,那么与查询结果不相关的结果就出现在查询结果中,只有NULL值 – >这是你想要的 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |