如何获取一个表中的出现次数并将另一个表更新为该值?

时间:2014-12-08 00:06:44

标签: c# mysql

我想写一个SQL语句:

  • 计算表格booking打开的行数,booking.postcode为" MK"
  • 记下该图(在booking.plot_id中),然后用值count更新表plot.jobs

例如,当booking表具有以下行时运行SQL查询:

enter image description here

会在plot.jobs中将以下突出显示的值更新为1:

enter image description here

到目前为止我的代码(请注意我使用Connector/Net):

public int CountBooking()
{
    string query = "SELECT Count(*) FROM booking WHERE postcode=MK AND status=open";
    int count = -1;
    // ExecuteScalar will return one value
    var cmd = new MySqlCommand(query, _connection);
    count = int.Parse(cmd.ExecuteScalar() + "");
    // Close
    CloseConnection();
    return count;
}

如果有3行,plot_id为4,而6行,plot_id为6,则突出显示的值将分别更新为3和6。

我将如何实现它?

2 个答案:

答案 0 :(得分:1)

从未使用过Connector / Net,但我会这样做:

运行此查询以检索plot_id和JobCount:

选择plot_id,从预订中计算(*)JobCount,其中postcode ='mk',status ='open'group by plot_id;

然后滚动浏览此结果集并发出如下所示的更新命令:

更新作业设置作业= [JobCount],其中plot_ID = [plot_id]

注意[JobCount]和[plot_id]的值将来自您的第一个查询。

答案 1 :(得分:1)

你在第一部分很接近。如果你想要每个plot_id的开口数,你需要在GROUP BY语句中使用它,如下所示:

SELECT plot_id, COUNT(*) AS numOpenings
FROM bookings
WHERE postcode = 'MK' AND status = 'open'
GROUP BY plot_id;

您可以将它作为UPDATE语句中的子查询使用,方法是将其连接到绘图表并更新匹配的行,如下所示:

UPDATE plot p
JOIN(
  SELECT plot_id, COUNT(*) AS numOpenings
  FROM bookings
  WHERE postcode = 'MK' AND status = 'open'
  GROUP BY plot_id) temp ON temp.plot_id = p.plot_id
SET p.jobs = temp.numOpenings;

这在SQL Fiddle中得出。如果您有更多问题,请告诉我。