sql-server – SQL Server:具有WHERE子句的多表连接

栏目: 数据库 · 发布时间: 6年前

内容简介:http://stackoverflow.com/questions/8758223/sql-server-multiple-table-joins-with-a-where-clause

我正在使用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”中,都有所不同.

看到这个答案我刚才写的一个类似的问题:

What is the difference in these two queries as getting two different result set?

简而言之:

>如果把它放入WHERE子句(就像你所做的那样),与该计算机无关的结果被完全过滤掉

>如果你把它放在JOIN中,那么与查询结果不相关的结果就出现在查询结果中,只有NULL值

– >这是你想要的

http://stackoverflow.com/questions/8758223/sql-server-multiple-table-joins-with-a-where-clause


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Release It!

Release It!

Michael T. Nygard / Pragmatic Bookshelf / 2007-03-30 / USD 34.95

“Feature complete” is not the same as “production ready.” Whether it’s in Java, .NET, or Ruby on Rails, getting your application ready to ship is only half the battle. Did you design your system to......一起来看看 《Release It!》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具