查询中的SQL错误

时间:2011-02-15 09:31:44

标签: sql sql-server

执行此操作时出现错误:

SELECT  A.company_id,
        B.property_code,
        ISNULL(C.value, B.default_value) as [value]
FROM T_COMPANY A,
    T_PROPERTY_DEFINITION B
    LEFT JOIN [T_PROPERTY_VALUE] C
        ON B.property_id=C.property_id AND A.company_id=C.company_id

Msg 4104,Level 16,State 1,Line 7 无法绑定多部分标识符“A.company_id”。

为什么?

4 个答案:

答案 0 :(得分:1)

您的加入条款:

T_PROPERTY_DEFINITION B
LEFT JOIN [T_PROPERTY_VALUE] C
    ON B.property_id=C.property_id AND A.company_id=C.company_id

不包含表A,因此您无法在“ON”条件下引用它。 A位于单独的语法块中。

答案 1 :(得分:0)

您错过了表 T_Company T_Property_definition 的联接。

您可能希望明确提及这两者之间的 INNER JOIN

答案 2 :(得分:0)

我建议不要混合旧式(table1, table2, table3)JOIN语法和更新的ANSI JOIN语法(INNER JOIN, LEFT JOIN)。我会一直使用新的,标准化的ANSI JOIN(更清晰,更直观,更少意外笛卡尔产品的风险)。

所以使用这个:

FROM 
   dbo.T_COMPANY A
INNER JOIN
   dbo.T_PROPERTY_DEFINITION B ON A.company_id = B.company_id -- or whatever

另外,我相信你不能在一个JOIN中将一个表C加入到两个单独的其他表(AB中......所以这很可能无效:

LEFT JOIN [T_PROPERTY_VALUE] C
    ON B.property_id = C.property_id AND A.company_id = C.company_id

你需要找到另一种方式来加入这三个表,以便JOIN工作 - 因为你给了我们所需的所有信息,我只能猜测 - 这将是一个可能的JOIN(连接表A到C,然后在第二步C到B):

SELECT  
   A.company_id,
   B.property_code,
   ISNULL(C.value, B.default_value) as [value]
FROM 
   dbo.T_COMPANY A
LEFT JOIN 
   dbo.[T_PROPERTY_VALUE] C ON A.company_id = C.company_id        
LEFT JOIN
   dbo.T_PROPERTY_DEFINITION B ON B.property_id = C.property_id 

根据您的实际需求,您可以将LEFT JOIN中的一个替换为INNER JOIN

答案 3 :(得分:0)

SQL对我来说似乎不正确

SELECT  A.company_id,
        B.property_code,
        ISNULL(C.value, B.default_value) as [value]
FROM T_PROPERTY_DEFINITION B
    LEFT JOIN [T_PROPERTY_VALUE] C
        ON B.property_id=C.property_id 
    INNER JOIN T_COMPANY A
        ON A.company_id=C.company_id

注意:我没有尝试过这段SQL语法。这是一个不混合JOINing语法的示例,这是代码中的情况。