MYSQL третье внутреннее объединение не работает

0

Я написал запрос, как показано ниже, но получив ошибку

SELECT DISTINCT T2.host, 
 T3.error
FROM table1 T1
INNER JOIN table2 T2
ON
T1.item_id = T2.item_id
INNER JOIN table3 T3
ON
T1.ID = T3.run_id 
and T1.submit_id = (select max(T1.submit_id) from table1 T1) 
;

Здесь T3.run_id = (select max(T3.run_id) from T3) дает ошибку

У меня три строки в T3 для max(T3.run_id) для определенного T1.item_id = T2.item_id

item_id  host
15907    abc.com
7303     cde.com
7304     abcd.com
7305     cdedf.com

Выше приведен пример данных для table 2 select * from table2 where item_id = '15907';

id  submit_id   item_id
49898   16693   15907
49899   16693   15907
49900   16693   15907
53735   17972   15907
53736   17972   15907
53737   17972   15907

Выше приведен пример данных для table 1 select * from table1 where item_id = '15907';

Выше я должен выбрать строки с max(submit_id) и T1.item_id = T2.item_id В этом примере это будет 17972

id  run_id  error
12345   53735   error1
12345   53735   error2
12346   53735   error3
12347   53736   error4
12348   53736   error5
12349   53737   error6

Выше приведен пример данных для table3 select * from table3 where run_id IN ('53735', '53736', '53737');

Я получаю 0 строк в качестве вывода

Теги:
join
inner-join
left-join

2 ответа

0

проверьте ниже

SELECT DISTINCT T2.host 
     ,T3.error
    FROM table1 T1
    INNER JOIN table2  T2 ON T1.item_id = T2.item_id
    and T1.submit_id = (select max(T1.submit_id) from table1  T1 )
    INNER JOIN table3 T3 ON T1.ID = T3.run_id 
    ;

выход

host    error
abc.com error1
abc.com error2
abc.com error3
abc.com error4
abc.com error5
abc.com error6
0

Вы можете переписать запрос, как показано ниже, чтобы получить ожидаемый результат

SELECT DISTINCT T2.host,T3.error
FROM table2 T2
INNER JOIN (
    SELECT a.*
    FROM table1 a
    LEFT JOIN table1 b ON a.item_id = b.item_id AND a.submit_id < b.submit_id
    WHERE b.submit_id IS NULL
) T1  ON T1.item_id = T2.item_id
INNER JOIN table3 T3 ON T1.ID = T3.run_id 

Я переместил table1 во внутренний запрос, чтобы получить идентификаторы, где submit_id максимально

DEMO

Ещё вопросы

Сообщество Overcoder
Наверх
Меню