SQL Server - 以简单的条件加入

时间:2017-12-20 14:18:18

标签: sql sql-server

我有一个简单的JOIN问题

条件:

  • 集合A具有固定数量的元素(比如10个元素)并且永远不会更改 (总是有10个元素)。
  • 集合B是集合A的子集,可以包含零元素(空集)或某些元素(从1到10)。

是否可以编写JOIN查询(不使用IF ... ELSE ...或CASE ... WHEN)返回结果,以便:

  • 如果Set B为空,则返回集A中的所有元素。
  • 如果Set B不为空,则仅返回集B中的元素。

Giorgos Betsos解决了这个问题!!!!!!!!!

我已将我的例子发布如下。

CREATE TABLE #A (number INT PRIMARY KEY) 
INSERT INTO #A(number) VALUES(0)
INSERT INTO #A(number) VALUES(1)
INSERT INTO #A(number) VALUES(2)
INSERT INTO #A(number) VALUES(3)
INSERT INTO #A(number) VALUES(4)
INSERT INTO #A(number) VALUES(5)
INSERT INTO #A(number) VALUES(6)
INSERT INTO #A(number) VALUES(7)
INSERT INTO #A(number) VALUES(8)
INSERT INTO #A(number) VALUES(9)

CREATE TABLE #B (number INT PRIMARY KEY)

SELECT *
FROM #A
WHERE NOT EXISTS (SELECT number FROM #B)

UNION ALL

SELECT *
FROM #B

DROP TABLE #A
DROP TABLE #B

1 个答案:

答案 0 :(得分:2)

获得所需结果的简单方法是:

SELECT *
FROM A
WHERE NOT EXISTS (SELECT 1 FROM B)

UNION ALL

SELECT *
FROM B

如果B为空,则查询会返回所有A条记录(来自UNION操作的第一个查询)。

如果B不为空,则仅返回此表的记录(来自UNION操作的第二个查询)。