Sql 如何将交叉联接的结果插入到另一个表中?

Sql 如何将交叉联接的结果插入到另一个表中?,sql,sql-server,Sql,Sql Server,我使用此SQL创建交叉联接,并将结果插入第三个表中。你知道为什么这样不行吗?交叉联接在自身运行时起作用。insert也独立运行,但在合并语句时不运行 INSERT INTO Person (FirstName, LastName) VALUES (Select fn.Name, ln.Name from FirstName as fn cross join LastName as ln); 你想插入。选择语法: 在这些实例中,不需要使用“值”部分插入: INSERT INTO Person

我使用此SQL创建交叉联接,并将结果插入第三个表中。你知道为什么这样不行吗?交叉联接在自身运行时起作用。insert也独立运行,但在合并语句时不运行

INSERT INTO Person (FirstName, LastName) 
VALUES (Select fn.Name, ln.Name from FirstName as fn cross join LastName as ln);
你想插入。选择语法:

在这些实例中,不需要使用“值”部分插入:

INSERT INTO Person (FirstName, LastName) Values (Select fn.Name, ln.Name from FirstName as fn cross join LastName as ln)
以下SQL应该可以工作:此代码实际上不工作-请参阅下面的更新

使用SELECT语句插入值时,不需要使用insert INTO tableName…CSV列名称。。。价值观价值观的CSV。。。语法,用于插入明确定义的语法,但也不完全准确-请参阅以下更新:

由于添加了Stuart Ainsworth的评论而进行的更新和代码更正:

由于收到评论,下面的代码已经更新,我保留了上面的代码,以供参考如何不这样做!为了保持注释的相关性,但是应该注意的是,正如在SQL FIDLE中指出和演示的那样,前面的代码将无法工作

该示例将使用插入模板插入到。。。价值观的CSV。。。选择从…起等与前面所述不同,将列定义为INSERT INTO。。。价值观的CSV。。。不完全用于显式插入,可以与select语句一起使用。下面的答案与上面的答案基本相同

INSERT INTO Person 
    (FirstName, LastName)
SELECT 
    fn.Name 
    ,ln.Name 
FROM FirstName AS fn 
CROSS JOIN LastName AS ln

假设PERSON表中只有两列的顺序与SELECT语句firstname、lastname相同,您的建议就行了。理想的解决方案是将列名指定为INSERT子句的一部分。您可能是对的,但根据我的经验,因为列名已明确定义,例如FirstName=fn.Name,只要不需要其他字段,它就会成功运行。虽然公平地说,如果需要其他领域,上述任何解决方案都不起作用,我如何才能做到这一点FirstName,LastName是唯一的键-每次在FirstName表中输入新条目时,我都需要执行上述操作基本上,在上述场景中如何实现插入忽略?@Mayubeldar。如果你有问题,你应该以问题的形式提出,而不是以评论的形式。
INSERT INTO Person
SELECT 
    FirstName = fn.Name, 
    LastName = ln.Name 
FROM FirstName AS fn 
CROSS JOIN LastName AS ln
INSERT INTO Person 
    (FirstName, LastName)
VALUES
    ('John','Smith')
    ,('Jane','Doe')`
INSERT INTO Person 
    (FirstName, LastName)
SELECT 
    fn.Name 
    ,ln.Name 
FROM FirstName AS fn 
CROSS JOIN LastName AS ln