只需阅读此网站https://www.toptal.com/sql/interview-questions
他们展示了使用union all删除重复的技巧
SELECT *
FROM mytable
WHERE a = X
UNION ALL
SELECT *
FROM mytable
WHERE b = Y AND a != X
以上脚本对我来说并不清楚。假设我想从两个employee表中获取数据,但是喜欢使用带有where子句的union all删除重复。
假设我的员工表具有ID,名称和薪水等结构。
现在使用union all
发布一个示例SQL,它将显示来自2个表的不同行。
答案 0 :(得分:3)
实际上,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 |
+----+---------+--------+
答案 1 :(得分:2)
如果只有你必须使用UNION ALL,否则我会选择Handoko Chen的解决方案
Select Distinct *
From (
Select * From Employee1
Union All
Select * From Employee2
) A
答案 2 :(得分:2)
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
答案 3 :(得分:0)
UNION
删除重复项。而且为什么不以相同的结构在我的桌子和“什么都没有”之间使用它。
这是句子:
select id, name from mytable
UNION
select id, name from mytable
where 1=2