2013-03-18 4 views
-2

2 개의 테이블이 있습니다.왼쪽 조인을 사용하는 SQL 요청

표 A : (ID, 타입, ...)
여기서 ID는 기본 키

표 B이다 (ID, 타임 스탬프, OLD_TYPE,하는 new_type, ...)
여기에 ID가 기본 키가 아니다.

B.type에 의한 마지막 (타임 스탬프에 의한) A.nype과 같지 않은 ID를 반환하는 sql 요청을 만들고 싶다.

+0

질문에 대한 약간의 배경을 알려주는 데 도움이됩니다. 'A'와'B'라고 부르는 것은 우리가 당신의 문제를 이해하는 것을 어렵게 만듭니다. –

+0

샘플 데이터 및 출력물을 보여주십시오. 그렇지 않으면 sql fiddle – DevelopmentIsMyPassion

+0

을 만들면 질문에 대한 정보가 부족합니다. 어떻게 테이블 B를 그룹화할까요? –

답변

1

니키타에게 도움이 될까요?

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

감사합니다. Aid = B.id를 대괄호로 추가했습니다. 하지만 지금은 매우 천천히 작동합니다 ( – Nikita

+0

내 문제를 해결할 수 있다고 생각합니다.) – Nikita

+0

:) 환영합니다. 내 대답을 업데이트하여 귀하의 질문을 해결 하겠지만, 지금 떠나야합니다. 내일 올바른 질문을 드릴 것입니다. ..하지만 나는 네가 그 전에 네 자신의 대답을 얻을 것이라고 생각한다. 행운을 빈다. – Patriks

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를 살펴 보자.

관련 문제