我正在读这个网站的https://www.toptal.com/sql/interview-questions
他们展示了使用联合所有删除重复项的技巧
SELECT *
FROM mytable
WHERE a = X
UNION ALL
SELECT *
FROM mytable
WHERE b = Y AND a != X
上面的脚本对我来说不太清楚。假设我想从两个employee表中提取数据,但希望使用union all和where子句删除重复数据。
假设我的employee表具有ID、Name和salary之类的结构。
现在使用union all
发布一个示例SQL,它将显示来自两个表的不同行。
发布于 2016-11-20 05:11:54
实际上,删除重复项的是UNION。假设我在一个表中有3行数据。然后使用2个联合查询。了解union和union all之间的区别。
DECLARE @Employee TABLE
(
ID INT,
Name VARCHAR(100),
Salary INT
)
INSERT @Employee VALUES
(1, 'Alice', 50000),
(2, 'Bob', 40000),
(3, 'Charlie', 60000)
SELECT ID, Name, Salary FROM @Employee WHERE Salary >= 50000
UNION
SELECT ID, Name, Salary FROM @Employee WHERE Salary >= 60000
SELECT ID, Name, Salary FROM @Employee WHERE Salary >= 50000
UNION ALL
SELECT ID, Name, Salary FROM @Employee WHERE Salary >= 60000
结果:
+----+---------+--------+
| ID | Name | Salary |
+----+---------+--------+
| 1 | Alice | 50000 |
| 3 | Charlie | 60000 |
+----+---------+--------+
+----+---------+--------+
| ID | Name | Salary |
+----+---------+--------+
| 1 | Alice | 50000 |
| 3 | Charlie | 60000 |
| 3 | Charlie | 60000 |
+----+---------+--------+
发布于 2018-08-19 03:17:21
create table test_a(id numeric);
create table test_b(id numeric);
insert into test_a(id) values
(10),
(20),
(30),
(40),
(50);
insert into test_b(id) values
(10),
(30),
(50);
GO
select * from test_b
union all
SELECT * FROM(select * from test_a
except
select * from test_b) ABC
发布于 2019-10-24 23:47:18
UNION
删除重复项。为什么不在我的表和'nothing‘之间使用它,当然结构是一样的。
下面是这句话:
select id, name from mytable
UNION
select id, name from mytable
where 1=2
https://stackoverflow.com/questions/40697806
复制相似问题