创建没有重复的新 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 表的主要内容,如果未能解决你的问题,请参考以下文章