考虑我尝试过的以下查询,有两个表,Orders和Customers,每个都有列名CustomerID,当我尝试显示CustomerID的唯一一列正在显示时,我无法理解为什么会这样,或者我是理解错误的基础知识。
SELECT Customers.CustomerID,Orders.CustomerID
FROM customers
inner JOIN orders
on customers.customerid=orders.customerid;
当我尝试只显示一列时,它显示效果良好
SELECT Customers.CustomerID
FROM customers
inner JOIN orders
on customers.customerid=orders.customerid;
和
SELECT Customers.CustomerID
FROM customers
inner JOIN orders
on customers.customerid=orders.customerid;
所以我的问题是为什么我无法显示两者。
答案 0 :(得分:4)
使用别名
SELECT Customers.CustomerID as customerid,Orders.CustomerID as ocustomerid
FROM customers
inner JOIN orders
on customers.customerid=orders.customerid;
答案 1 :(得分:2)
您需要为每列定义别名:
SELECT Customers.CustomerID as customer_id, Orders.CustomerID as order_id
FROM customers
inner JOIN orders
on customers.customerid=orders.customerid;
答案 2 :(得分:1)
这是一些查询接口的特性。你的第一个查询(我会这样写)是:
SELECT c.CustomerID, o.CustomerID
FROM customers c INNER JOIN
orders o
ON c.customerid = o.customerid;
这将返回两列,均名为CustomerId
。某些查询接口坚持结果列在结果集中是唯一的。因此,结果忽略了"后续"具有相同名称的列。
通过将查询用作子查询,您可以了解这一点:
SELECT x.*
FROM (SELECT c.CustomerID, o.CustomerID
FROM customers c INNER JOIN
orders o
ON c.customerid = o.customerid
) x;
这应该返回错误,因为CustomerId
定义不明确。
要记住三点: