SQL查询从两个表中输出数据,这些表没有通过PK / FK直接链接,但是通过多个其他表链接?

时间:2017-10-20 09:02:56

标签: sql postgresql

我是SQL和DBMS的新手,因此我仍然在学习最佳实践,并探索可能的和不可能的。我在Postgres中设计了一个数据库,它包含6个表:SATELLITE DATA,它有一个带有CROP DATA的外键,它有一个带有FIELDS的FK,它有一个带有FARMS的FK,它有一个MET STATION和MET DATA的外键,它也有一个MET STATION的外键。 (我希望我已经解释好了..)

我假设我可以得到一个输出表,其中包含彼此相距最远的2个表中的信息(卫星数据和MET数据),因为通过PK和FK有一个通过所有其他表的链接..但是我可以'找出SQL来做到这一点。 (我可以设想一个很长的SQL来做它..但如果有可能我希望有更有效的方法..)

我的问题是:是否有SQL可以通过我所做的相同数据库设计以高效的方式执行上述操作?或者我应该重新设计我的数据库,以便每个需要链接的表是直接链接而不是通过多个其他表链接?

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

@{
    var years = new List<SelectListItem>{
        new SelectListItem{ Text="Select Year", Value = "0" , Disabled = true, Selected = true},
    };

    years.AddRange(Enumerable.Range(1900, 200)
          .Select(i => new SelectListItem { Text = i.ToString(), Value = i.ToString() }));
}

@Html.DropDownList("year", 
      years, 
      new { @class = "form-control" })

现在您只需要用实际名称(您未提供的名称)替换表/列名称

答案 1 :(得分:0)

查询并不难。它看起来像这样:

select . . . 
from met_station ms join
     farms f
     on ms.farm_id =f.farm_id join
     fields fi
     on f.field_id = fi.field_id join
     crops c
     on c.crop_id = f.crop_id join
     satellites s
     on s.satellite_id = c.satellite_id;

如果我正确理解数据模型,这些都是1-n关系,并且处理连接没有问题。你只需要列出它们。并且,假设连接键是主键(在一个表中),性能应该没问题。

当某些表格为n-m时,您确实遇到了挑战。处理多个此类关系通常涉及在加入之前进行聚合。