-1

我正在尝试创建两个具有许多共同字段的表的视图。 在此处输入图像描述

两个表中存在的字段应该存在于新视图中的一个字段下。我在这里找到了一些帖子,而另一个我已经忘记了建议使用UNIONFULL OUTER JOIN做我想做的事情,但我对此很陌生,答案有点令人困惑。我想我需要从中选择所有不发生冲突的字段,然后从组合了表共有的所有字段的语句中选择其余的data字段,但是如何发挥作用呢?elongUNION ALLFULL OUTER JOIN

我认为FULL OUTER JOIN需要保持视图中的行数与每个表中的行数之和相同,但我不太确定。

也许是我的解决方案?我不确定 aCROSS JOIN将如何与类似的字段一起使用。

对于那些关心我如何加入这些的人,我试图从两个表中取出每一行并将它们放在一个新视图中。我的问题是由重复的字段(c2、footnote1、footnote2 等)引起的。我希望它们保持为 c2、footnote1、footnote2,但它们会不断接收生成的别名。任何属于 c2 的东西都是 c2,无论它来自哪张纸。

编辑:感谢下面的答案,这就是我现在正在写的,这似乎是我想要的。由于字段的数量,它需要很长时间;有一个更好的方法吗?更自动的东西?

Edit2:这是完整查询的样子,以防将来对某人有所帮助。我希望有一种更自动的方法来做到这一点,因为这需要一些时间。感谢所有帮助过的人!

SELECT       ID, tableNum, UTC, colNum, c1, c2, null AS c3, c4, colRow, footnote1, footnote2, footnote3, footnote4, 
                                         property, orientation, specimenDesign, exposTempMinF AS exposTempFMin,   exposTempMaxF AS exposTempFMax, 
                                         exposTempRTMinF AS exposTempFRTMin,   exposTempRTMaxF AS exposTempFRTMax, designValueRoomTempF_A, 
                                         designValueRoomTempF_T99                                       , designValueRoomTempF_B                                     , 
                                         designValueRoomTempF_S                                    , designValueRoomTempF_Typical, designValueRoomTempF_Estimate, 
                                         designValueRoomTempF_Units                                         , conversionFactor, null AS form,  null AS thickRangeInMin, null AS thickRangeInMax, 
                                         null AS widthRangeInMin, null AS widthRangeInMax, null AS areaInSqrMin, null AS areaInSqrMax, note
FROM         dbo.[DesignAllowables-Data] AS data 
UNION ALL
SELECT       ID, tableNum, UTC, colNum, null, c2, c3         , null, colRow, footnote1, footnote2, null         , null           , 
                                         property, orientation, specimenDesign, exposTempF_min AS exposTempFMin, exposTempF_max AS exposTempFMax, 
                                         exposTempRTF_min AS exposTempFRTMin, exposTempRTF_max AS exposTempFRTMax, designValueRTF_A AS designValueRoomTempF_A, 
                                         designValueRTF_T99 AS designValueRoomTempF_T99, designValueRTF_B AS designValueRoomTempF_B, 
                                         designValueRTF_S AS designValueRoomTempF_S, null                                                , null                                                , 
                                         designValueRTF_Units AS designValueRoomTempF_Units, conversionFactor, form           , thickRangeInMin              , thickRangeInMax, 
                                         widthRangeInMin           , widthRangeInMax              , areaInSqrMin         , areaInSqrMax             , note
From           dbo.[DesignAllowables-Elong-RA] AS elong
4

2 回答 2

1

您链接到的问题不适用于您的问题。

以下是一些可以尝试的组合形式:

全外连接

SELECT 
COALESCE(T1.Col1,T2.Col1) As Col1,
COALESCE(T1.Col2,T2.Col2) As Col2
FROM 
T1
FULL OUTER JOIN
T2
ON T1.ID = T2.ID

匹配ID以组合行。 ID在两个表中必须是唯一的,否则您将获得“重复”行

联合所有

SELECT 
T.ID,
MAX(T.Col1) As Col1,
MAX(T.Col2) As Col2
FROM
(
SELECT Col1,Col2 FROM T1
UNION ALL
SELECT Col1,Col2 FROM T2
) T
GROUP BY T.ID

有效匹配 ID

如果 ID 不是唯一的,这不会引入重复。它将任意选择值的组合

这是您如何返回所有组合行并有选择地组合列的方法。在此示例中,C1 仅存在于表 T1 中

SELECT C1,C2, C3 
FROM T1
UNION ALL
SELECT NULL, C2,C3 
FROM T2

重要的问题是:每张桌子上都有唯一的键吗?你需要匹配吗?

于 2015-10-13T21:59:01.570 回答
0

UNION ALL 基本上一个接一个地返回两个表。JOIN 基本上返回两个表的列。这是一种过于简单化的方法,但是联合组合了行,而连接组合了列。

如果两个表都有几乎相同的列,听起来你想要一个 UNION。

于 2015-10-13T21:32:46.957 回答