2012-08-23 20 views
0

我創建了一個更新過程,如果另一個表中的匹配記錄發生更改,它將更改表中記錄的值,但是,我如何得到它的設置是,即使有像12個領域,可以更新,程序將更新每一個即使只有1個字段已更改我如何創建一個SQL IF語句來檢查字段是否需要更新

這是因爲效率低下,它只需要約50秒1分的記錄,沒有好,如果有一個像幾百,我想出了這個很容易做到

if olddata != newdata 

    UPDATE!!! 

endif 

事情psudocode是,我有小到n o在SQL中使用if語句的經驗,如果我可以使用PHP,那麼只需像上面的if語句那樣運行帶有WHERE子句的SELECT,然後檢查它返回的行數(如果是0則沒有變化),但該過程必須是公正的SQL,我可以拿出最好的是這個

IF(SELECT o.field FROM originaltbale AS o INNER JOIN updatetable AS u ON o.primarykey = u.primarykey WHERE o.field <> u.field) != 0 

    UPDATE!!! 

ENDIF 

但我懷疑這會工作,因爲我敢肯定,SELECT不會返回的行數,怎麼能我創建了一個if語句,可以像這樣工作

+0

**什麼是**數據庫系統,以及哪個版本? * SQL *只是*結構化查詢語言* - 許多數據庫系統使用的語言,但不是數據庫產品......功能通常是特定於供應商的 - 所以我們真的需要知道什麼**數據庫系統**您是「重新使用.... –

+0

我的工作是使MySQL數據庫與Microsoft SQL Server同步,如您所說,不同的數據庫產品具有不同的功能,我聲明SQL而不是MySQL或Transact-SQL,這樣我得到的答案不是關於任何特定的產品,但通常SQL,這也意味着我的腳本應該如何工作,因爲我的設計將會更加強大,因爲它是獨立於平臺的 –

+0

您可以隨時添加兩個標籤 - 一個用於'MySQL',另一個用於' SQL Server' ... –

回答

3

我不確定我完全理解你要更新的內容,但是你最好在單個語句中執行此操作,並將IF融入WHERE子句中。

UPDATE updatetable u 
    SET ... something ... 
WHERE EXISTS (SELECT 1 FROM originaltable o WHERE o.primarykey = u.primarykey AND ...) 

但是,如果你在兩個表中存儲相同的字段,你確定這是你的表的最好的數據庫設計?

+0

即時通訊同步2個不同的數據庫,一個MySQL數據庫和一個Microsoft SQL Server,更新表是從其他數據庫有數據的說明表,顯然MySQL數據庫將要使用用於Web系統,而Microsoft SQL Server將用於內部程序 –

2

如果您想知道某行是否存在滿足您的條件,則可以使用EXISTS子句。

-- If the original table doesn't have a record with the state same as that in updatetable 
IF NOT EXISTS (SELECT o.field FROM originaltbale AS o INNER JOIN updatetable AS u ON o.primarykey = u.primarykey WHERE o.field <> u.field) 
BEGIN 

    UPDATE !!! 

END 

希望這會有所幫助。

相關問題