【问题标题】:UNION ALL returning results similar to UNIONUNION ALL 返回类似于 UNION 的结果
【发布时间】: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


【解决方案1】:

因此,数据库正在执行您要求它执行的操作。在创建视图的语句中选择 distinct 意味着无论何时从视图中进行选择,都会从结果集中删除重复的行。

顺便说一下,识别视图和表之间的区别很重要。我自己并不经常使用 Views,但是当我使用 Views 时,我会在它们前面加上 vw,所以我经常被提醒我不是在看原始表。

更不用说您的视图中还有其他选择标准(例如,姓氏

【讨论】:

    【解决方案2】:

    我觉得没问题。

    select * from a union all select * from b order by c;
    

    【讨论】:

    • 您的回答有两个问题:首先 a 和 b 是表名,c 是字段名。其次,你怎么知道表a和表b的字段名都一样?
    猜你喜欢
    • 1970-01-01
    • 2014-06-27
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多