C# WebMatrix-内部联接和Foreach循环
我正在尝试做一些我经常看到的事情,但是我很难找到最好的方法 我有以下疑问:C# WebMatrix-内部联接和Foreach循环,c#,sql,razor,foreach,webmatrix,C#,Sql,Razor,Foreach,Webmatrix,我正在尝试做一些我经常看到的事情,但是我很难找到最好的方法 我有以下疑问: "SELECT * FROM Property_Info INNER JOIN RateInfo ON Property_Info.PropertyID=RateInfo.RateID" 由此,我执行以下foreach循环以显示我的所有属性 foreach(var row in queryResults){ <div class="row"> <h4>@row.PropertyName&
"SELECT * FROM Property_Info INNER JOIN RateInfo ON Property_Info.PropertyID=RateInfo.RateID"
由此,我执行以下foreach循环以显示我的所有属性
foreach(var row in queryResults){
<div class="row">
<h4>@row.PropertyName</h4>
<h5>Prices from: xxxx</h5>
</div>
}
我的问题是,我需要在联接表RateInfo上选择Top1,以显示每个房产的最低价格。我需要在foreach循环中显示这一点,我在其中放置了xxxx
我是否需要编写一个单独的SQL查询?如果是这样,如何将其绑定到foreach循环中的相应条目
表格信息:
属性信息表-
财产ID,
属性名称
费率信息表-
PropertyID与另一个表中的PropertyID匹配,
RateID,
RateName,
RateValue在不知道表结构的情况下,这有点困难,但我假设RateInfo是每行的唯一Id。在这种情况下:
SELECT * FROM Property_Info pi
cross JOIN RateInfo ri
where ri.RateId = (select max(ri2.RateId) from RateInfo ri2 where ri2.RateId = pi.PropertyId)
…或者您可以使用以下选项来代替maxri2.Id:
select top 1 ri2.RateId from RateInfo ri2...
干杯-
从属性信息pi中选择*
交叉连接速率信息
其中ri.Id=从RateInfo ri2中选择maxri2.Id,其中ri2.RateId=pi.PropertyId
注意ri.Id=选择maxri2.Id。。。。这个Id是我假设RateInfo上存在的唯一字段。
抱歉
SELECT
pi.PropertyID,
pi.PropertyName,
MIN(ri.Rate) AS LowestRate,
MAX(ri.Rate) AS HighestRate
FROM
Property_Info pi
INNER JOIN
RateInfo ri ON pi.PropertyID = ri.PropertyID
GROUP BY
pi.PropertyID,
pi.PropertyName
代码中的更改在表名上使用别名,以便更容易再次引用,并使用GROUP BY对RateInfo表中的数据执行聚合函数。希望这就是您所需要的?谢谢!我不确定你在pi和ri方面取得了什么成绩,但我会尝试一下,希望我能得到我需要的结果。谢谢:pi、ri和ri2是“相关”名称:基本上是表格的简写名称。这就是为什么你可以在RateInfo中以两倍于我的速度得到同一个表,但要完全明确你指的是哪一个表。另外-很抱歉,有一个输入错误:我编辑了答案以更正它,否则它将不起作用。出于性能原因,这是一种糟糕的方法。WHERE子句中的子查询将对完全不必要的交叉连接的每个结果执行一次。实际上,根据DBMS的不同,它不会执行。在SQL Server 2012中,类似查询的查询计划显示了一个连接两个表的嵌套循环—不是最有效的,但与“每个结果一次”不同。现代的关系数据库管理系统不是这样的。你能发布两个相关表的模式吗?完成了,希望这就是你需要的?正如我试图解释的那样。每个属性都可以有几个与之关联的费率,但我只想在我的foreach循环中显示最便宜或最昂贵的费率。所以foreach循环显示生成的每个属性都是最便宜的价格?为了确保我理解您的意思,您问题中的property\u Info.PropertyID=RateInfo.RateID应该是property\u Info.PropertyID=RateInfo.PropertyID,对吗?啊,是的,对不起!我在试一些东西,所以一定忘了把它恢复过来。很好,这正是我需要的,它工作得很好。我以前从未使用过别名,但看起来这会使我的查询看起来更整洁。此外,我从未使用过GROUP BY,但它非常有效。我需要仔细阅读一下,看看它是如何工作的。