执行此操作时出现错误:
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”。
为什么?
答案 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
加入到两个单独的其他表(A
和B
中......所以这很可能无效:
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语法的示例,这是代码中的情况。