Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WebMatrix-内部联接和Foreach循环_C#_Sql_Razor_Foreach_Webmatrix - Fatal编程技术网

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,但它非常有效。我需要仔细阅读一下,看看它是如何工作的。