Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/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 在临时表的一列中插入一行值_Sql_Sql Server - Fatal编程技术网

Sql 在临时表的一列中插入一行值

Sql 在临时表的一列中插入一行值,sql,sql-server,Sql,Sql Server,以这个查询为例: INSERT INTO #QueryOutput SELECT DISTINCT UR2.LeftID, UR3.LeftID FROM UserRelations UR1 JOIN UserRelations UR2 ON UR1.RightID = UR2.LeftID JOIN UserRelations UR3 ON UR2.RightID = UR3.LeftID W

以这个查询为例:

INSERT INTO #QueryOutput 
   SELECT DISTINCT 
      UR2.LeftID, UR3.LeftID  
   FROM 
      UserRelations UR1 
   JOIN 
      UserRelations UR2 ON UR1.RightID =  UR2.LeftID 
   JOIN 
     UserRelations UR3 ON UR2.RightID =  UR3.LeftID  
   WHERE 
     (UR1.RelationID = 1) 
     OR (UR1.RelationID = 1 AND UR2.RelationID = 1) 
     AND UR1.LeftID IN (SELECT UserID FROM #QueryInput)
这是神奇的一行:

INSERT INTO #QueryOutput SELECT DISTINCT UR2.LeftID ,UR3.LeftID 
#queryyoutput
是一个包含一列UserID的表

我想插入
UR2.LeftID
UR3.LeftID
,或者在这一列中插入尽可能多的
UR*.LeftID
。你打算怎么做


谢谢

也许这正是你想要的:

INSERT INTO #QueryOutput
    SELECT DISTINCT (case when n.n = 2 then UR2.LeftID 
                          when n.n = 3 then UR3.LeftID
                     end)
    FROM UserRelations UR1 JOIN
         UserRelations UR2
         ON UR1.RightID =  UR2.LeftID JOIN
         UserRelations UR3
         ON UR2.RightID =  UR3.LeftID CROSS JOIN
         (select 2 as n union all select 3) n 
    WHERE (UR1.RelationID = 1 ) OR (UR1.RelationID = 1 AND UR2.RelationID = 1 ) AND
          UR1.LeftID IN (SELECT UserID FROM #QueryInput);

你现在的做法是不可能的,除非你试着像下面这样做一个
UNION-ALL

INSERT INTO #QueryOutput

SELECT DISTINCT UR2.LeftID FROM UserRelations UR1 
JOIN UserRelations UR2 ON UR1.RightID =  UR2.LeftID 
JOIN UserRelations UR3 ON UR2.RightID =  UR3.LeftID  WHERE (UR1.RelationID = 1 ) 
OR (UR1.RelationID = 1 AND UR2.RelationID = 1 ) 
AND UR1.LeftID IN (SELECT UserID FROM #QueryInput)

UNION ALL

SELECT DISTINCT UR3.LeftID FROM UserRelations UR1 
JOIN UserRelations UR2 ON UR1.RightID =  UR2.LeftID 
JOIN UserRelations UR3 ON UR2.RightID =  UR3.LeftID  WHERE (UR1.RelationID = 1 ) 
OR (UR1.RelationID = 1 AND UR2.RelationID = 1 ) 
AND UR1.LeftID IN (SELECT UserID FROM #QueryInput)

如果您使用的是SQL Server 2008或更高版本,我认为最好的方法是使用


如何将两个值放入一列中?您是否正在寻找一种方法来“透视”值,从而使多个列变为多行?是的,是一种将值透视到单个列的方法。我只是不太擅长SQL,而且我也不完全理解数据透视:(如前所述,您的整个WHERE条件与其第一个谓词匹配,即您可以将其重写为
WHERE UR1.RelationID=1
,结果相同。这是因为
X∨ X∧ 无论什么≡ X
。查询逻辑(或您在此发布的版本)中可能缺少某些内容.我不理解.n.代码,抱歉。它是如何工作的?如果可能的话,我只想更改查询的第一行。起始部分和位置部分应该保持原样…而且,可能不止两个值。我可以有UR1.LeftID,UR2.LeftID,…UR*.LeftID。我不知道这将如何增加..因为我必须自动生成qu代码:(这是一个unpivot来分别获取每个值。我认为你不能仅仅通过更改
select
子句来实现这一点。这会产生与我建议的表完全相同的结果吗?我能为任意X个表使用我想要的任意多个Union all吗?谢谢。它应该…基本上你是在拉所有的表。)将不同的
LeftID
放入临时表的单个列中,是的,您可以使用任意多个union all。
INSERT INTO #QueryOutput 
SELECT  DISTINCT upvt.LeftID
FROM    UserRelations UR1 
        JOIN UserRelations UR2 
            ON UR1.RightID =  UR2.LeftID 
        JOIN UserRelations UR3 
            ON UR2.RightID =  UR3.LeftID
        CROSS APPLY (VALUES (UR2.LeftID), (UR3.LeftID )) AS upvt (LeftID)
WHERE   (UR1.RelationID = 1 ) 
OR      (UR1.RelationID = 1 AND UR2.RelationID = 1 ) 
AND     UR1.LeftID IN (SELECT UserID FROM #QueryInput)