我有两个表,我希望通过CustomerID
连接表(CustomerID
对于两个表是相同的)。所以我使用了我的查询:
SELECT
Cus.CustomerID
FROM
Customers AS Cus
JOIN
Payments AS Pay ON Cus.CustomerID = Pay.CustomerID
WHERE
CustomerID = 2
它显示错误:
where子句中的'CustomerID'含糊不清
如何以不在CustomerID
之前添加表名的方式解决模糊列名错误?
答案 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.CustomerID
或Pay.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是一个索引字段(这应该是加入的话),这可能会强制查询计划使用扫描而不是搜索。