【问题标题】:Insert two columns from two different tables into another table in SQL将两个不同表中的两列插入到 SQL 中的另一个表中
【发布时间】:2013-08-08 20:29:24
【问题描述】:

我一直在寻找解决问题的方法,但找不到任何地方。 这是我的问题:我有来自两个不同表的两列,并希望将它们插入另一个空表。我试图运行这个查询,但它不起作用,我什至不知道为什么:

SELECT a.column, c.column 
FROM FirstTable.column a, SecondTable.column c
left outer join ThirdTable.column b on a.column = b.column
left outer join ThirdTable.column b on c.column = b.column

运行后,我收到以下消息:

Msg 4104, Level 16, State 1, Line 3
The multi-part identifier "a.column" could not be bound.
Msg 1011, Level 16, State 1, Line 1
The correlation name 'b' is specified multiple times in a FROM clause.

我还要补充一点,a.column 有 1143 行,c.column 有 2057 行。两者都是各自表的PK。

任何帮助都将不胜感激。

【问题讨论】:

  • 请用真实的列名和表名重写查询。您只能在 FROM 子句中使用别名“b”一次。在这里你用了两次

标签: sql outer-join


【解决方案1】:

尝试将您的查询重新定义为

SELECT a.column, c.column 
FROM Table a left outer join Table b on a.column = b.column 
left outer join Table c on c.column = b.column

如果您提供准确的查询会更好,但问题很可能与连接有关。

【讨论】:

  • 是的......“表 a”和“表 b”表示表名,而不是 michael 指出的关键字 Table
  • 您的查询返回给我两列 - 太好了!但是,c.column 中的所有行都是 NULL。谢谢。以下 D Stanley 的查询也是如此
  • 需要查看数据以了解查询为什么会这样
【解决方案2】:

我使用了一组临时表变量来显示概念,但它应该很容易转换为实际表。

DECLARE @tabl1 TABLE (col1 int DEFAULT 1)
    INSERT INTO @tabl1 VALUES (1)

DECLARE @tabl2 TABLE (col2 int DEFAULT 2)
    INSERT INTO @tabl2 VALUES (2)

DECLARE @tabl3 TABLE (col1 int, col2 int)

-- This should be what you need.

INSERT INTO @tabl3
SELECT a.col1
     , b.col2
FROM @tabl1 a, @tabl2 b

SELECT * FROM @tabl3

【讨论】:

    【解决方案3】:

    除非您正在执行笛卡尔连接,否则您会混合使用显式和隐式语法。我会选择其中一个(我自己偏爱显式语法):

    SELECT a.column, c.column 
    FROM Table a
    left outer join Table b on a.column = b.column
    left outer join Table c on b.column = c.column
    

    或任何适合你的结构的东西。

    【讨论】:

    • 它给了我与 Pankaj 的查询相同的结果 - 两列(一开始就很好),但 c.columns 都是 NULL 但它不应该是。这里的显式和隐式语法是什么意思?
    • 隐式语法是SELECT * FROM a, b WHERE a.key = b.key。显式为SELECT * FROM a INNER JOIN b ON a.key = b.key
    • 如果第二列全部为空,则没有符合从 A 到 B 或 B 到 C 的连接条件的记录。
    • 它们与其他表中的某些列有点相关(但不是直截了当)
    • 这对我没有帮助 - 你需要找出正确的连接来关联表格。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    相关资源
    最近更新 更多