2014-01-21 91 views
0

我在写一个存储过程,其中有一些变量和一个临时表。FROM内部的SQL SELECT语句,INNER JOIN

我努力做到以下几点:

INSERT INTO table1(
    col1, 
    col2, 
    col3, 
SELECT 
    @col1, 
    t2.col2, 
    t3.col3 
FROM 
    #table2 t2, 
     (SELECT * 
      FROM table4 t4 
      INNER JOIN #table2 t2 ON t4.ID = t2.ID) t3 

然而,说t2t3有5行,上面插入5 * 5 = 25行,它应该只是5.好像在t2t3之间的FROM中计算了一个叉积,我无法确定原因。

+1

t2和t3之间似乎没有指定连接条件 – Dan

+0

是的,这就是我的想法。所以我需要在'FROM'里面加入't2'和't3'? – dursk

+0

例如:从#table2 t2内部连接(选择...)t3开始t2。[field] = t3。[field]'。我不知道t2和t3之间的共同领域。 – Dan

回答

1

这是你打算做什么?

INSERT INTO table1(col1, col2, col3) 
    SELECT @col1, t2.col2, t3.col3 
    FROM table4 t4 INNER JOIN 
     #table2 t2 
     ON t4.ID = t2.ID; 

您的原始查询有一个额外的参考#table2

1

你确定你应该使用逗号而不是实际的连接吗?这可能是导致交叉产品而不是从连接行中选择的原因。