Mysql 尝试显示时SQL模糊
考虑我尝试过的以下查询,有两个表,Orders和Customers,每个表都有列名称CustomerID,当我尝试显示这两个表时,CustomerID只显示一列,我不明白为什么会这样,或者我理解的基本原理是错误的Mysql 尝试显示时SQL模糊,mysql,sql,select,Mysql,Sql,Select,考虑我尝试过的以下查询,有两个表,Orders和Customers,每个表都有列名称CustomerID,当我尝试显示这两个表时,CustomerID只显示一列,我不明白为什么会这样,或者我理解的基本原理是错误的 SELECT Customers.CustomerID,Orders.CustomerID FROM customers inner JOIN orders on customers.customerid=orders.customerid; 当我试图只显示一列时,它显示得很好 SE
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 as customer_id, Orders.CustomerID as order_id
FROM customers
inner JOIN orders
on customers.customerid=orders.customerid;
使用别名
SELECT Customers.CustomerID as customerid,Orders.CustomerID as ocustomerid
FROM customers
inner JOIN orders
on customers.customerid=orders.customerid;
这是某些查询接口的一个特点。我想这样写的第一个问题是:
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定义不正确
要记住三点:
大多数数据库和查询接口都允许结果集具有多个同名列。
没有数据库允许子查询中有多个同名列。
您知道如何通过指定列别名来解决此问题,这是一种最佳做法。
@aswinmythili,因为在应用程序代码中,变量被重写。无法详细理解@yafater当两列名称相同时,可以使用as的别名来区分它们。
SELECT x.*
FROM (SELECT c.CustomerID, o.CustomerID
FROM customers c INNER JOIN
orders o
ON c.customerid = o.customerid
) x;