模糊列名称错误

时间:2015-10-30 16:05:22

标签: sql sql-server

我有两个表,我希望通过CustomerID连接表(CustomerID对于两个表是相同的)。所以我使用了我的查询:

SELECT
   Cus.CustomerID
FROM
   Customers AS Cus
JOIN
   Payments AS Pay ON Cus.CustomerID = Pay.CustomerID
WHERE
  CustomerID = 2 

它显示错误:

  

where子句中的'CustomerID'含糊不清

如何以不在CustomerID之前添加表名的方式解决模糊列名错误?

3 个答案:

答案 0 :(得分:6)

由于它不知道CustomerID子句where中要使用哪个CustomerID = 2,因此您应该指定使用哪个:{/ p>

SELECT
   Cus.CustomerID
FROM
   Customers AS Cus
JOIN
   Payments AS Pay
ON
   Cus.CustomerID = Pay.CustomerID
WHERE
  Cus.CustomerID = 2 

使用Cus.CustomerIDPay.CustomerID并不重要,因为它们在您当前的陈述中始终相同(因为您在join中等于它们。)

答案 1 :(得分:3)

这个可疑的部分在这里:

WHERE
  CustomerID = 2

这两个表都有这个列你需要解释:

Cus.CustomerID

Pay.CustomerID

答案 2 :(得分:3)

  

[我]一种不在CustomerID

之前添加表名的方法

您可以使用子查询。

SELECT CustomerID
FROM
(
  SELECT
     Cus.CustomerID
  FROM
     Customers AS Cus
  JOIN
     Payments AS Pay
  ON
     Cus.CustomerID = Pay.CustomerID
) query
WHERE CustomerID = 2

这是一个好方法吗?不会。如果CustomerID是一个索引字段(这应该是加入的话),这可能会强制查询计划使用扫描而不是搜索。