SQL Server简单问题

时间:2011-07-14 09:41:38

标签: sql sql-server

编辑:我写错了gill更改我的问题

我是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

它将第一个字段与第二个字段相乘,这给了我更多记录。

有任何帮助吗? 谢谢!

2 个答案:

答案 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

会产生T1T2的所有组合或行。它被称为交叉产品,并且(正确地)与CROSS JOIN一起使用,如下所示:

FROM T1 CROSS JOIN T2

如果您想根据条件加入这两个表(而不是获得交叉产品),请使用JOININNER JOIN(这两个是相同的):

FROM T1 JOIN T2
  ON T1.[From] = T2.[To]

将为您提供T1.FromT2.To匹配的所有行组合(相等)。我想您希望将T1的每一行与T2的行匹配,其中T2.To只大于T1.From所以我使用的是“小于”< }运算符而不是“相等”=运算符。

添加了GROUP BYMIN(),只从这些行中获取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

如果这不是你的意思(尽管在这两个列中具有相同的值在这个意义上似乎是反效果的),你有什么其他领域以及如何将这些线组合在一起。

相关问题