【发布时间】:2019-07-29 03:12:41
【问题描述】:
我正在从使用 Edx 的 Transact-SQL 查询数据中学习 SQL。但是,我认为使用 UNION ALL 语法的部分存在一些问题。
首先,教程创建了一个名为Employees 的表,其中包含337 行名字和姓氏。然后我想将 Employee 表的名字、姓氏联合到 Customer 表的名字、姓氏(有 847 行 - 有很多重复的名字)。以下代码是我输入的。
SELECT FirstName, LastName
FROM SalesLT.Employees
UNION ALL
SELECT FirstName, LastName
FROM SalesLT.Customers
ORDER BY LastName;
但是,代码只返回了 441 行。这本身就是有问题的,因为当您合并所有两组具有 337 行和 847 行的表时,它应该返回 1184 行!此特定问题的 Union all 语法与 Union 一样好(删除重复项)。我的错误在哪里?
PS:(在本教程中,UNION ALL 应该合并所有行而不删除重复项)
编辑:按如下方式运行计数代码后:确实加起来了:
SELECT COUNT(FirstName) FROM SalesLT.Employees; --337 rows
SELECT COUNT(FirstName) FROM SalesLT.Customers; --104 rows
是不是因为教程是这样创建员工表的。
CREATE VIEW [SalesLT].[Customers]
as
select distinct firstname,lastname
from saleslt.customer
where lastname >='m'
or customerid=3;
GO
CREATE VIEW [SalesLT].[Employees]
as
select distinct firstname,lastname
from saleslt.customer
where lastname <='m'
or customerid=3;
GO
【问题讨论】:
-
您缺少查询的开头。 IE。没有初始的 SELECT 子句。你是在做 SELECT 还是 SELECT distinct?以下查询的结果是什么?从 SalesLT.Employees 中选择计数(名字);从 SalesLT.Customers 中选择 COUNT(FirstName);
-
您能否告知以下两个查询的结果?从 SalesLT.Employees 中选择计数(名字);从 SalesLT.Customers 中选择 COUNT(FirstName);
-
如果您的查询#1: "SELECT FirstName, LastName FROM SalesLT.Employees" 返回 337 行并且查询#2: "SELECT FirstName, LastName FROM SalesLT.Employees ORDER BY LastName" 返回 847 行,然后您发布的查询将始终返回 1184 行。请检查您的原始查询中是否有 DISTINCT/UNION/EXCEPT 等。
标签: sql sql-server tsql