如何从 SQL 表中选择特定行并连接 SQL 服务器中的多个表?

Posted

技术标签:

【中文标题】如何从 SQL 表中选择特定行并连接 SQL 服务器中的多个表?【英文标题】:How to select specific row from SQL table and join multiple tables in SQL server? 【发布时间】:2019-04-14 14:05:47 【问题描述】:

我正在使用 Northwind 数据库来学习 SQL Server。我正在尝试运行 SQL 查询,以便我可以从Employees 表中选择特定的员工(EmployeeID=1),并从Orders 表中选择与该员工相关的每个订单,它是如何运送(运送方式),运送它的公司,从订单日期到发货日期的总天数。对于我有以下查询,我不确定我的查询是否正确。有人可以验证一下吗?

我尝试在查询下运行

  SELECT Employees.EmployeeID,
    Orders.OrderID,DATEDIFF(DAY,Orders.OrderDate,Orders.ShippedDate) AS 'Date 
    Diff',
    Orders.ShipVia,Shippers.ShipperID,Shippers.CompanyName FROM  Employees
    LEFT JOIN Orders ON Employees.EmployeeID=Orders.EmployeeID
    LEFT JOIN Shippers ON Orders.ShipVia=Shippers.ShipperID
    WHERE Employees.EmployeeID =1
    GROUP BY 

 Orders.ShipVia,Shippers.ShipperID,Shippers.CompanyName,Employees.EmployeeID,Orders.OrderID,Orders.OrderDate,Orders.ShippedDate

【问题讨论】:

你的GROUP BY 似乎是多余的。 @GordonLinoff .. 另一种方法是什么?只需删除 Group BY... 我在想是否有其他方法可以解决这个问题? 你没有使用任何聚合函数那么你为什么要使用 group by ..没有聚合它会改变结果 @KedarLimaye.. 你能详细说明一下吗? 是否有您准备查询的特定要求? 【参考方案1】:

这里有一些使用 GROUP BY 子句的规则-

1) 一个 SELECT 语句子句,将查询结果分成多组行,通常是为了对每个组执行一个或多个聚合。 SELECT 语句每组返回一行。

2) 指定列或列上的非聚合计算。此列可以属于表、派生表或视图。该列必须出现在 SELECT 语句的 FROM 子句中,但不需要出现在 SELECT 列表中。

3) 列必须出现在 SELECT 语句的 FROM 子句中,但不要求出现在 SELECT 列表中。但是,列表中任何非聚合表达式中的每个表或视图列都必须包含在 GROUP BY 列表中

这些是 SQL Server 相关文档中的一些要点

希望这能解决您的问题或清除您的概念。

更多信息在- https://docs.microsoft.com/en-us/sql/t-sql/queries/select-group-by-transact-sql?view=sql-server-2017

【讨论】:

感谢您的解释和链接

以上是关于如何从 SQL 表中选择特定行并连接 SQL 服务器中的多个表?的主要内容,如果未能解决你的问题,请参考以下文章

用于从连接表中进行选择的 T-SQL 查询,其中有可变数量的参数?

SQL Server:从一个表中复制新添加的行并自动插入到另一个表中

如何从1个表中选择许多行并将其插入另一个表中特定行的特定JSONB字段中?但是在单个原始SQL查询中

SQL - oracle - 如何从连接结果中选择特定部门

SQL 服务器。从2个表中选择数据[重复]

SQL:从表 1 中选择行并存在(表 2 中的行)