gpt4 book ai didi

sql-server - SQL Server : Multiple table joins with a WHERE clause

转载 作者:行者123 更新时间:2023-12-02 05:21:40 26 4
gpt4 key购买 nike

我正在使用 SQL Server,但在尝试从我想要的 SELECT 查询中获取结果时遇到了困难。我尝试过加入不同的顺序并使用子查询,但没有什么能按照我想要的方式工作。以这个可能安装在人们计算机上的具有不同版本级别的软件应用程序为例。

我需要使用 WHERE 执行 JOIN,但由于某种原因我无法获得我想要的结果。

也许我看的数据是错误的,我不太确定为什么我不能让它工作。

应用

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

Software_Computer联结表

ID  SoftwareID  ComputerID
1 1 1
2 4 1
3 2 2
4 5 2

计算机

ID  ComputerName
1 Name1
2 Name2

我想要一个可以在选择特定计算机时运行的查询来显示软件版本和应用程序具有的软件版本和应用程序,但我也希望它显示它没有的应用程序(版本将为NULL 因为它没有该软件)

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 JOINRIGHT JOIN时,将过滤器放在WHERE中还是放入中会有所不同加入

请参阅我不久前写的类似问题的答案:
What is the difference in these two queries as getting two different result set?

简而言之:

  • 如果将其放入 WHERE 子句中(就像您所做的那样,与该计算机无关的结果将被完全过滤掉
  • 如果您将其放入 JOIN 中,则与该计算机无关的结果将出现在查询结果中,仅具有 NULL
    --> 这就是你想要的

关于sql-server - SQL Server : Multiple table joins with a WHERE clause,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8758223/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com