我想写一个SQL语句:
booking
中打开的行数,booking.postcode
为" MK" booking.plot_id
中),然后用值count更新表plot.jobs
例如,当booking
表具有以下行时运行SQL查询:
会在plot.jobs
中将以下突出显示的值更新为1:
到目前为止我的代码(请注意我使用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。
我将如何实现它?
答案 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中得出。如果您有更多问题,请告诉我。