在mysql中使用join时两列名称相同

在mysql中使用join时两列名称相同,mysql,Mysql,我一直在使用内部联接联接三个表。现在我最终得到的是一个联接表er,其中两个列名相同,数据不同。一个包含locationname,另一个包含作物名称。现在如何访问locationname 我的生产表如下: 我的作物表如下: 我的位置表如下: 我的sql查询如下: Select * from production AS cust INNER JOIN location AS comp ON cust.location_id = comp.location_id INNE

我一直在使用
内部联接
联接三个表。现在我最终得到的是一个联接表er,其中两个列名相同,数据不同。一个包含locationname,另一个包含作物名称。现在如何访问locationname

我的生产表如下:

我的作物表如下:

我的位置表如下:

我的sql查询如下:

  Select * from production AS cust 
    INNER JOIN location AS comp ON cust.location_id = comp.location_id
     INNER JOIN crops AS crop ON cust.crop_id=crop.crop_id 
    where cust.year_of_production =2004 AND crop.name="paddy"
执行sql查询后的输出如下: 这里有两个列名称作为名称。我想访问包含taplejung的名称。我不想要名称包含paddy的列。我该怎么做

首先
选择*
很可怕,而且;只需选择所需的列

SELECT p.*, c.name AS crop_name, l.name AS location_name, ...
其次,你的化名真的很奇怪。它们与表名没有关系,因此很难读取查询

SELECT 
  p.*,
  c.name AS crop_name

FROM products AS p

JOIN location AS l
  ON l.location_id = p.location_id

JOIN crops AS c
  ON c.crop_id = p.crop_id
 AND c.name    = "paddy"

WHERE p.year_of_production = 2004
这里,我们选择的是
p.*
,它将选择
products
表中的所有字段。接下来,我们选择
c.name作为crop\u name
,这将把
crops.name
字段添加到别名为
cropu name
的结果中

通过这种方式,您可以将
crop\u name
用作结果中的字段


除此之外,我不确定您还需要其他表中的哪些字段,但您可以修改select以获取所有需要的字段

SELECT p.*, c.name AS crop_name, l.name AS location_name, ...

如果在多个表中有相同的列名,则可以使用表名指定它

比如说,

从表1、表2中选择表1.id、表2.id

也可以使用表别名

从表1 t1、表2 t2中选择t1.id、t2.id

没什么好担心的


这同样适用于任何类型的联接。没什么新鲜事。

我在想两种方法:

  • 您可以创建一个存储过程,然后根据需要重新编辑列名
  • 对于简单的方法,只需替换

    挑选*


  • 对于产品栏。

    可能有以下帮助:

    Select comp.name,production_amount from production
     AS cust INNER JOIN location AS comp ON cust.location_id = comp.location_id 
    INNER JOIN crops AS crop ON cust.crop_id=crop.crop_id
     where cust.year_of_production =2004 AND crop.name="paddy"
    

    选择*,而不是
    ,命名所有需要的列。。。