2012-02-02 238 views
0

對於一個消息傳送系統,我試圖標記爲僱員適當to_del和from_del字段2.合併兩個查詢到一個在同一個表(相同列/不同行)

下面是前僱員2刪除消息:

company_id | to | from | to_del | from_del 
    1  4  2  0   0 
    1  2  4  0   0 

這裏是工作人員2刪除郵件後:

company_id | to | from | to_del | from_del 
    1  4  2  0   1 
    1  2  4  1   0 

我要運行2個查詢這個工作:

UPDATE messages SET from_del='1' WHERE company_id=1 AND from=2 
UPDATE messages SET to_del='1' WHERE company_id=1 AND to=2 

有沒有辦法將這兩個查詢合併爲一個更高效的查詢?例如:

UPDATE messages SET from_del='1',to_del='1' WHERE company_id=1 AND (from=2 OR to=2) 

這個單個查詢的問題是,它將所有4個刪除字段標記爲'1'。關於如何獲得一個高效的查詢來處理上述2個查詢的任何想法?

回答

2

聽起來像是case工作...

update messages 
    set from_del = case when from = 2 then 1 else from_del end 
    , to_del = case when to = 2 then 1 else to_del end 
where company_id = '1' 

你更新不需要是這個樣子列,但你只能執行一個更新不能多,你會與多個查詢。

我不喜歡使用fromto列名......它只是要求混亂......

+0

感謝您的輸入,但你是什麼意思「你更新不列需要這樣''? – Maverick 2012-02-02 16:49:01

+0

這意味着如果你只需要更新'from_del',你也會更新'to_del',不管你喜不喜歡,如果它不符合你的條件,你更新它爲相同的值,但你仍然更新它。 – Ben 2012-02-02 16:56:26

+0

是從其他from_del和其他to_del?你認爲運行上面的兩個查詢或使用case部分更有效嗎? – Maverick 2012-02-02 17:04:03

0

如果您執行的更新需要兩個不同的WHERE子句,那麼不幸的是您將不得不執行兩個查詢。如果您擔心表現不佳,您可以隨時將其批量加入TRANSACTION

相關問題