尝试显示时SQL不明确

时间:2016-07-27 11:30:20

标签: mysql sql select

考虑我尝试过的以下查询,有两个表,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;

所以我的问题是为什么我无法显示两者。

3 个答案:

答案 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定义不明确。

要记住三点:

  • 大多数数据库和查询接口允许结果集具有多个具有相同名称的列。
  • 没有数据库允许子查询中具有相同名称的多个列。
  • 您知道如何通过分配列别名来解决此问题,无论如何这都是最佳做法。