我一直在使用inner join
加入三个表。现在我最终得到的是一个连接表,其中两个列名相同,并且它们具有不同的数据。一个包含locationname,另一个包含crop名称。现在我如何访问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的列。我怎么做
答案 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)
我想到了两种方法:
简单来说,只需替换
即可SELECT *
与产品列。