两个列名相同,使用mysql中的join

时间:2014-07-10 04:03:58

标签: mysql

我一直在使用inner join加入三个表。现在我最终得到的是一个连接表,其中两个列名相同,并且它们具有不同的数据。一个包含locationname,另一个包含crop名称。现在我如何访问locationname。

我的生产表如下: enter image description here

我的庄稼表如下: enter image description here

我的位置表如下: enter image description here

我的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的列。我怎么做 Here the there are two columnname as name . i want to access the name that contains taplejung . i donot want the column with name that contains paddy. How do i do that

4 个答案:

答案 0 :(得分:2)

首先关闭SELECT *是可怕的evil;只需选择您想要的列

其次,你的别名真的很奇怪。它们与表名无关,这使得难以阅读查询

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 AS crop_name,这会将crops.name字段添加到您的结果别名为 crop_name

这样您就可以使用crop_name作为结果中的字段。


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

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

答案 1 :(得分:1)

以下可能会有所帮助:

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"

答案 2 :(得分:0)

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

例如,

select table1.id, table2.id from table1, table2

或者您可以使用表别名

select t1.id, t2.id from table1 t1, table2 t2

没什么可担心的。

同样适用于任何类型的连接。没什么新的。

答案 3 :(得分:0)

我想到了两种方法:

  1. 您可以创建存储过程并根据需要重新编辑列名称。
  2. 简单来说,只需替换

    即可

    SELECT *

  3. 与产品列。