Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 尝试显示时SQL模糊_Mysql_Sql_Select - Fatal编程技术网

Mysql 尝试显示时SQL模糊

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

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