2013-03-18 58 views
-2

我有2個表。使用左連接的SQL請求

表A:(ID,類型,...)
這裏ID是主鍵

表B:(ID,時間戳,OLD_TYPE,NEW_TYPE,...)
這裏id不是主鍵

我想做一個sql請求,它返回的這個id與A.type不一樣,最後一個(按時間戳)B.new_type。

+0

它有助於給你的問題一些背景。調用事物'A'和'B'使我們更難理解你的問題。 – 2013-03-18 13:40:51

+0

請顯示樣本數據和輸出。否則創建sql小提琴 – DevelopmentIsMyPassion 2013-03-18 13:41:05

+0

你的問題缺乏信息。我們如何分組表B? – 2013-03-18 13:42:41

回答

1

這對你有幫助Nikita?

select a.* from A a where a.type!= (
    select b.new_type from B b order by `timestamp` desc limit 1 
) 
+0

謝謝我剛剛在括號中加了A.id = B.id。但現在它工作非常緩慢( – Nikita 2013-03-18 13:53:13

+0

我認爲這可以解決我的問題,謝謝 – Nikita 2013-03-18 14:03:19

+0

:)不客氣..我會更新我的答案來解決你的問題,但我現在必須離開,我會明天給你適當的查詢..但我想你會在這之前得到你的回答,祝你好運。 – Patriks 2013-03-18 14:04:15

0

嘗試:

select a.id, a.type 
from A a 
join (select id, max(`timestamp`) max_timestamp from B group by id) mb 
    on a.id = mb.id 
join B b on mb.id = b.id and mb.max_timestamp = b.`timestamp` 
where a.type <> b.new_type 
0

使用觸發器來記錄事件,有些事情是這樣的(未測試的代碼):

CREATE TRIGGER logger BEFORE UPDATE ON A 
FOR EACH ROW 
BEGIN 
    IF NEW.Type <> OLD.Type THEN 
    INSER INTO B(id, timestamp, old_type, new_type, ...) 
     VALUES (id, CURRENT_TIMESTAMP, OLD.Type, NEW.Type, ...) 
    END IF;   
END; 

看看在documentation進一步閱讀。