Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL SELECT语句位于FROM内部,带有内部联接_Sql_Sql Server 2008_Join - Fatal编程技术网

SQL SELECT语句位于FROM内部,带有内部联接

SQL SELECT语句位于FROM内部,带有内部联接,sql,sql-server-2008,join,Sql,Sql Server 2008,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)

我正在编写一个存储过程,其中有一些变量和一个临时表

我正在努力做到以下几点:

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

然而,假设t2和t3有5行,上面插入的是5*5=25行,其中应该只有5行。似乎在t2和t3之间的FROM中计算了一个叉积,我不太清楚为什么。

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

这是您打算做的吗

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

您的原始查询额外引用了表2。

在t2和T3之间似乎没有指定连接条件是的,这就是我的想法。所以我需要在FROM?的内部连接t2和t3,类似于:fromtable2t2内部连接选择。。。t2上的t3。[字段]=t3。[字段]。我不知道t2和t3之间的公共字段。看起来您可以消除内联视图,从外部中选择内部,然后直接连接:从表2中选择@col1、t2.col2、t4.col3作为t2将表4作为t4.id=t2.id上的t4