我是SQL的新手,我有一个Q ..
我做了2个Temp。表。 每个都有25行。(DateValue)
我想在第三个表中合并这两个表。 第一张表是[From] 第二张表是[To] ... 两个表都有不同的值
我希望得到这样的结果:
From| To |
1111|2222
2222|3333
3333|4444
等。
我使用这个简单的查询
Create Table #T3
(
[From] Datetime
,[To] Datetime
)
INSERT Into #T3
SELECT Distinct #T1.[From], #T2.[To]
From #T1,#T2
Where #T1.[From] is not null
And #T2.[To] is not null
Select * from #T3
Drop Table #T3
Drop Table #T2
Drop Table #T1
但我的结果是这样的
From| To |
1111|1111
1111|2222
1111|3333
2222|1111
2222|2222
2222|3333
它将第一个字段与第二个字段相乘,这给了我更多记录。
有任何帮助吗? 谢谢!
答案 0 :(得分:1)
OP编辑后
这可能会按照您的意愿运作(但并不完全清楚):
INSERT INTO #T3
SELECT #T1.[From]
, MIN(#T2.[To])
FROM #T1
JOIN #T2
ON #T1.[From] < #T2.[To]
GROUP BY #T1.[From]
使用
FROM T1, T2
会产生T1
和T2
的所有组合或行。它被称为交叉产品,并且(正确地)与CROSS JOIN
一起使用,如下所示:
FROM T1 CROSS JOIN T2
如果您想根据条件加入这两个表(而不是获得交叉产品),请使用JOIN
或INNER JOIN
(这两个是相同的):
FROM T1 JOIN T2
ON T1.[From] = T2.[To]
将为您提供T1.From
与T2.To
匹配的所有行组合(相等)。我想您希望将T1
的每一行与T2
的行匹配,其中T2.To
只大于T1.From
所以我使用的是“小于”<
}运算符而不是“相等”=
运算符。
添加了GROUP BY
和MIN()
,只从这些行中获取T2.To
最小的{。}}。
答案 1 :(得分:0)
会的。它会为表1的每一行插入表2的副本,因为你没有说明如何提取你想要的东西。
现在,假设从和相同......你可以做到
INSERT Into #T3
SELECT Distinct #T1.[From], #T2.[To]
From #T1 left join #T2 on #T1.[From]=#T2.[To]
Where #T1.[From] is not null
如果这不是你的意思(尽管在这两个列中具有相同的值在这个意义上似乎是反效果的),你有什么其他领域以及如何将这些线组合在一起。