连接具有不同列数的两个表
Posted
技术标签:
【中文标题】连接具有不同列数的两个表【英文标题】:Join two tables with different column counts 【发布时间】:2014-05-15 13:23:54 【问题描述】:我正在尝试从两个不同的表中创建一个表
Table 1 has
ID Place Value Date
--------------------------------
1 Place Value1 Date1
2 Place1 Value2 Date2
4 Place2 Value1 Date1
7 Place3 Value2 Date1
and Table2 has
ID Name Values
------------------------
3 ColName1 Value2
5 ColName2 Value1
6 ColName3 Value2
现在我想创建一个带有 ID、Table1.Place、Table1.Date 和 Table2.Value 的新表
我尝试过使用
INSERT INTO [dbo].[tblNewTable]
SELECT tbl1.ID, tbl1.Place, tbl1.Date
FROM [Tabble1] tbl1
UNION
SELECT tbl2.Value
FROM [Table2] tbl2
但它表示使用 UNION、INTERSECT 或 EXCEPT 运算符组合的所有查询必须在其目标列表中具有相同数量的表达式。
请注意,两个表中的 ID 都是唯一的。
【问题讨论】:
这两个表有什么共同点?他们有吗? 你想要的结果是什么? 为缺失的列添加了 NULL @AllanS.Hansen 所说的 - 如果您在第二个选择列表中添加两个空值,即 SELECT tbl2.value, null, null FROM [Table2] tbl2,那么联合将工作。如果您想要一个特定的值,请将其放入。也就是说,结果可能是胡言乱语。你想做什么? 【参考方案1】:不完全确定您要的是什么。如果要使用UNION
语句,则每个查询中的列数必须相同(具有相同的数据类型)。所以在你的情况下,如果你想要的结果是得到一个 id 1 到 7 的列表,那么你需要这样的东西:
INSERT INTO [dbo].[tblNewTable]
SELECT tbl1.ID, tbl1.Place, tbl1.Date, tbl1.Value
FROM [Tabble1] tbl1
UNION
SELECT tbl2.ID, NULL, NULL, tbl2.Value
FROM [Table2] tbl2
这将导致:
ID Place Value Date
--------------------------------
1 Place Value1 Date1
2 Place1 Value2 Date2
3 NULL Value2 NULL
4 Place2 Value1 Date1
5 NULL Value1 NULL
6 NULL Value2 NULL
7 Place3 Value2 Date1
或者,您正在寻找JOIN
您的表以获得通用结果集:
INSERT INTO [dbo].[tblNewTable]
SELECT tbl1.ID, tbl1.Place, tbl1.Date, tbl2.Value
FROM [Tabble1] tbl1
JOIN [Table2] tbl2 ON tbl1.ID = tbl2.ID
在您提供的数据中,这将导致没有记录。
【讨论】:
【参考方案2】:联合应该在两个具有相同数量和类型的列的表上。 查询应如下所示。您需要的是如下联接:
INSERT INTO [dbo].[tblNewTable]
SELECT tbl1.ID, tbl1.Place, tbl1.Date, tbl2.Value
FROM [Tabble1] tbl1, [Table2] tbl2
WHERE tbl1.value = tbl2.value
【讨论】:
您应该使用JOIN
关键字明确指出您的加入,而不要使用ANSI-89 语法。
@BryceAtNetwork23 我无法从书面 SQL 查询中推断出这一点。此查询属于哪个环境?
“是的”你可以,“是的”你是。你有Tabble1
在你的FROM
中排在第一位,清楚地表明你扣除了Tabble1
属于“LEFT”。我要说的是,我们真的不应该使用 25 年前已弃用的语法来指定我们的 JOIN。以上是关于连接具有不同列数的两个表的主要内容,如果未能解决你的问题,请参考以下文章