2013-03-18 2 views
-2

У меня есть 2 таблицы.Запрос SQL с использованием левого соединения

Таблица A: (идентификатор, тип, ...)
здесь идентификатор является первичным ключом

Таблица B: (идентификатор, метка времени, old_type, new_type, ...)
здесь id не является первичным ключом

Я хочу сделать запрос sql, который возвращает такие идентификаторы, каждый с A.type, не такой же, как последний (по метке времени) B.new_type.

+0

Его полезно дать некоторый контекст вашему вопросу. Вызов вещей 'A' и' B' затрудняет нам понимание вашей проблемы. –

+0

Пожалуйста, покажите образцы данных и их вывод. Или создайте sql скрипт – 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

Спасибо Я только что добавил A.id = B.id в скобках. Но теперь он работает очень медленно ( – Nikita

+0

Я думаю, что это может решить мою проблему. Спасибо – Nikita

+0

:) Добро пожаловать. Я бы уточнил свой ответ, чтобы решить ваш вопрос, но я должен уйти сейчас, я дам вам правильный запрос завтра .. Но я думаю, что ты получишь свой ответ до этого, удачи. – Patriks

0

Try:

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 для дальнейшего чтения.

Смежные вопросы