SQL Server 不匹配时返回 TableAU 中的所有字段,匹配时只返回 Table

Posted

技术标签:

【中文标题】SQL Server 不匹配时返回 TableAU 中的所有字段,匹配时只返回 Table【英文标题】:SQL Server Return all fields in TableA when not matched and only TableB when matched 【发布时间】:2017-09-22 08:09:18 【问题描述】:

我有两个表,当表 B 中不匹配时,我想返回表 A 中的所有数据,当表 B 与表 A 匹配时,我想返回表 B 中的所有数据。我已经解决了这个问题,但它很难看。

create table TEST.A 
(TYPE varchar(50), AMOUNT INT, DESCRIPTION varchar(50), DATE datetime2)

create table TEST.B 
(TYPE2 varchar(50), AMOUNT2 INT, DESCRIPTION2 varchar(50), DATE2 datetime2)

insert into TEST.A  values
('apples',3,'fruit','2016-12-31'),
('bananas',2,'fruit','2016-12-15'),
('pears',7,'fruit','2016-12-11')

insert into TEST.B  values
('shop2',1,'shops','2016-12-31')

需要结果;

这里是丑陋的代码:

SELECT TYPE, AMOUNT, DESCRIPTION, DATE, NULL TYPE2,NULL AMOUNT2,NULL DESCRPTION2,NULL DATE2
FROM TEST.A
EXCEPT
SELECT A.*, NULL TYPE2,NULL AMOUNT2,NULL DESCRPTION2,NULL DATE2
FROM TEST.A a
JOIN TEST.B b ON a.DATE = b.DATE2
UNION
SELECT NULL, NULL, NULL, NULL, TYPE2, AMOUNT2, DESCRIPTION2, DATE2
FROM TEST.B
ORDER BY 1 DESC

我在这里遗漏了一些东西,谁能给我一个漂亮的答案?

【问题讨论】:

【参考方案1】:

我会用EXCEPT 重写第一部分,如下所示

SELECT TYPE, AMOUNT, DESCRIPTION, DATE, NULL TYPE2,NULL AMOUNT2,NULL DESCRPTION2,NULL DATE2
FROM TEST.A
WHERE NOT EXISTS (
    SELECT 1 FROM TEST.B b WHERE a.DATE = b.DATE
)

也可以使用NOT IN,但是,您必须小心使用 NULL 值。

SELECT TYPE, AMOUNT, DESCRIPTION, DATE, NULL TYPE2,NULL AMOUNT2,NULL DESCRPTION2,NULL DATE2
FROM TEST.A
WHERE a.DATE NOT IN(
    SELECT b.DATE FROM TEST.B b WHERE b.Date IS NOT NULL
)

【讨论】:

SELECT TYPE, AMOUNT, DESCRIPTION, DATE, NULL TYPE2,NULL AMOUNT2,NULL DESCRPTION2,NULL DATE2 FROM TEST.A WHERE NOT EXISTS ( SELECT 1 FROM TEST.B b WHERE a.DATE = b.DATE2 ) UNION SELECT NULL, NULL, NULL, NULL, TYPE2, AMOUNT2, DESCRIPTION2, DATE2 FROM TEST.B

以上是关于SQL Server 不匹配时返回 TableAU 中的所有字段,匹配时只返回 Table的主要内容,如果未能解决你的问题,请参考以下文章

Tableau 与 Microsoft SQL Server 2017 的连接

怎么启动tableau server

Tableau Server 中的直接 SQL Server 连接,业务用户没有数据库的读取权限

Tableau技巧——模糊查询

奇怪的“返回的数据与列的预期数据长度不匹配”错误,而预期长度要大得多 - SQL SERVER 2012

安装sql server 2008时,到功能选择时提示验证码错误,属性不匹配!想请教