[英]Update column with SELECT statement
我需要一個查詢來更新選擇(計數)語句中的列。
這就是我嘗試過的
SELECT m.MaidID, m.MaidJobCompleted, count(m.MaidName) as countMaidJobCompleted
FROM Booking b, Maid m
WHERE b.BookingMaidID like concat("%",m.MaidName,"%")
and b.BookingStatus="completed"
group by MaidName
獲得正確的結果:
MaidID MaidJobCompleted countMaidJobCompleted
329 0 5
188 0 1
281 0 8
229 0 4
MaidJobCompleted
是我創建的列(默認值為0)。 countMaidJobCompleted
是從上面的查詢獲取的列。
表
女佣
MaidIDPrimary int(100) ,autoIncrement eg(1,2,3,4,5..)
MaidJobCompleted int(100) ,default value = 0
MaidName varchar(200) ,eg(Batman,Spiderman,WonderWoman,Indiana John)
預訂
BookingID int(100) ,autoIncrement eg(1,2,3,4,5..)
BookingMaidID varchar(500) ,eg(Batman,Wonderwoman,Ironman)
BookingStatus varchar(50) ,eg(completed,pending..)
MaidID MaidJobCompleted countMaidJobCompleted
329 0 5
188 0 1
281 0 8
229 0 4
現在,我想使用UPDATE查詢根據'countMaidJobCompleted'更新'MaidJobCompleted'列。
首先,您應該標准化表格。 這意味着很多事情,但是在您的上下文中,我看到在表Maid中,需要計算MaidJobCompleted
列。 這是禁忌。 您最終可能會獲得不同步的值(例如,新的預訂已完成,但該計算的值未更新)。 但是有一種方法可以確保不會發生這種情況。 繼續閱讀...
另一個問題,BookingMaidID應該是一個數字,它是Maid表中MaidID的前鍵。 您正在將名稱與ID混合在一起。
我向您建議的是:
女佣表:
MaidID int(100) -- autoIncrement
MaidName varchar(200) -- some name
預訂表:
BookingID int(100) -- autoIncrement
MaidID int(100) -- foreign-key to Maid:MaidID
StatusID int(100) -- foreign-key to Status:StatusID
狀態表:
StatuID int(100) -- autoIncrement
StatusName varchar(200) -- some values, ex.completed,pending..
細節:
如果您需要知道所有女佣已經完成了多少預訂,請使用以下方法:
SELECT b.MaidID, m.MaidName, COUNT(b.BookingID) FROM Booking AS b JOIN Maid AS m ON b.MaidID = m.MaidID JOIN Status AS s ON b.StatusID = s.StatusID WHERE b.StatusID = (SELECT StatusID FROM Status WHERE StatusName = 'Completed')
或者,如果您需要了解1個特定的女仆,請按如下所示進行修改:
SELECT COUNT(b.BookingID) FROM Booking AS b JOIN Maid AS m ON b.MaidID = m.MaidID JOIN Status AS s ON b.StatusID = s.StatusID WHERE b.StatusID = (SELECT StatusID FROM Status WHERE StatusName = 'Completed') AND m.MaidName = 'THE-NAME-YOU-WANT'
讓我們來解釋一下該查詢:
免責聲明我直接在此處輸入查詢,而無需在示例數據庫上進行測試。
用您的原始查詢(成為子查詢)INNER JOIN您的maid
表,然后使用countMaidJobCompleted
來更新您的maid.MaidJobCompleted
列:
UPDATE maid
INNER JOIN
(SELECT m.MaidID, m.MaidJobCompleted, count(m.MaidName) as countMaidJobCompleted
FROM Booking b, Maid m
WHERE b.BookingMaidID like concat("%",m.MaidName,"%")
and b.BookingStatus="completed"
group by MaidName) t
ON maid.MaidID=t.MaidID
SET maid.MaidJobCompleted=t.countMaidJobCompleted;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.