创建没有重复的新 SQL 表

Posted

技术标签:

【中文标题】创建没有重复的新 SQL 表【英文标题】:Create New SQL Table w/o duplicates 【发布时间】:2020-09-30 21:08:08 【问题描述】:

我正在学习如何在 SQL 中创建表,从两个不同数据库的现有表中提取数据。我正在尝试创建一个组合两个没有重复的表的表。我看到有人说使用 UNION,但我无法让它发挥作用。

假设表 1 有 2 列(IdNumber、材料),表 2 有 3 列(IdNumber、大小、描述)

如何创建一个新表(名为 TABLE3),将这两者结合起来,但只显示列(PartDescription、Weight、Color)但没有重复。

到目前为止我所做的如下:

CREATE TABLE #Materialsearch (IdNumber varchar(30), Material varchar(30))
CREATE TABLE #Sizesearch (idnumber varchar(30), Size varchar(30), Description varchar(50))

INSERT INTO #Materialsearch (IdNumber, Material)
SELECT [IdNumber],[Material]
FROM [datalist].[dbo].[Table1]
WHERE Material LIKE 'Steel' AND IdNumber NOT LIKE 'Steel'

INSERT INTO #Sizesearch (idnumber, Size, Description)
SELECT [idNumber],[itemSize], [ShortDesc]
FROM [515dap].[dbo].[Table2]
WHERE itemSize LIKE '1' AND idnumber NOT LIKE 'Steel'

SELECT DISTINCT #Materialsearch.IdNumber, #Materialsearch.Material, 
            #Sizesearch.Size, #Sizesearch.Description 
FROM #Materialsearch 
INNER JOIN #Sizesearch 
     ON #Materialsearch.IdNumber = #Sizesearch.idnumber
ORDER BY #Materialsearch.IdNumber

DROP TABLE #Materialsearch
DROP TABLE #Sizesearch

这将显示所有由钢制成但没有钢作为其 itemid 的物品。 感谢您的帮助

【问题讨论】:

我不明白您要查找的结果集。 此处必须提供示例数据。 LIKE 不带通配符,%,应替换为= 我希望结果列表只显示材料和相应的尺寸。 请通过编辑而非 cmets 进行澄清。 PS“结合”没有什么特别的意思。你不是在说你想要什么。这还不清楚。错误的代码无助于说明正确的代码会做什么。使用足够多的单词、句子和对部分示例的引用来清楚完整地表达你的意思。在给出业务关系(船舶)/关联或表(基础或查询结果)时,说明其中的一行根据其列值说明了业务情况。 How to Askhelp center 【参考方案1】:

我不能 100% 确定您在追求什么 - 但您可能会发现这很有用。

您可以使用 FULL OUTER JOIN 获取两个表中的所有行,匹配它可以匹配的行,然后报告所有行。

我建议(为了您的理解)跑步

SELECT A.*, B.*
FROM #Materialsearch AS A
    FULL OUTER JOIN #Sizesearch AS B ON A.[IdNumber] = B.[IdNumber]

然后要获取相关数据,您只需要对其进行一些调整,例如,

SELECT 
    ISNULL(A.[IdNumber], B.[IdNumber]) AS [IdNumber], 
    A.Material, 
    B.Size, 
    B.Description
FROM #Materialsearch AS A
    FULL OUTER JOIN #Sizesearch AS B ON A.[IdNumber] = B.[IdNumber]

编辑:将输入错误的 INNER JOIN 更改为 FULL OUTER JOIN。糟糕:(非常感谢@Thorsten 找到它!

【讨论】:

我也认为 OP 正在寻找完整的外部连接。但是为什么你认为他们应该尝试使用内部连接查询呢?这些是错别字吗? 糟糕!谢谢@Thorsten。严重错别字!手指记忆。

以上是关于创建没有重复的新 SQL 表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 2008 中创建具有新名称的重复表

如何用SQL语句删除两个表中相同的记录?

在SQL中怎么删除两个表中相同的数据

SQL:有没有办法找到重复项并将它们标记为带有大小写的新列

SQL Server 将现有表复制到新表中但跳过重复记录

SQL - 省略重复表名