Соедините два запроса MySQL с помощью условия и последней отметки времени

0

Первый запрос для выбранных учреждений, а второй - для получения последнего обзора в этом учреждении.

Первый запрос:

SELECT 
    instituteId, 
    instituteName, 
    description 
FROM institutions 
WHERE instituteId IN ('1','2','3')";

Второй запрос:

SELECT 
    name,
    review, 
    timestamp 
FROM reviews 
WHERE instituteId='1' 
ORDER BY timestamp DESC 
LIMIT 1; 
  • 1
    я не вижу связанных столбцов в предложениях select или wheres о том, как объединить оба запроса.
  • 0
    через институт
Показать ещё 6 комментариев
Теги:

4 ответа

1
Лучший ответ
SELECT i.instituteId, 
       i.instituteName, 
       i.description ,
       r.name,
       r.review, 
       r.timestamp
FROM institutions i
INNER JOIN review r
ON i.instituteid = r.instituteId
INNER JOIN (SELECT instituteId,
                   MAX(timestamp) as timestamp
            FROM reviews
            GROUP BY instituteId 
            ) r1
ON r.instituteid = r1.instituteId 
AND r.timestamp = r1.timestamp
WHERE instituteId IN ('1','2','3')
  • 0
    ваша идея работает, но нужно отредактировать запрос
  • 0
    где вы хотите редактировать
Показать ещё 3 комментария
1

Есть много способов сделать это. Но следующий дает мне лучшую производительность в большом наборе данных. И да, не забудьте индексировать столбцы.

SELECT i.instituteId, 
   i.instituteName, 
   i.description ,
   r.name,
   r.review, 
   r.timestamp
FROM institutions i
LEFT JOIN reviews r
ON i.instituteid = r.instituteId and r.timestamp=
(SELECT MAX(timestamp)
        FROM reviews where reviews.instituteId = r.instituteId 
        ) 
WHERE instituteId IN ('1','2','3')
  • 0
    «Но следующий дает мне лучшую производительность в большом наборе данных» Действительно ?? Сопутствующий подзапрос чаще всего выполняется медленнее, чем JOIN.
  • 0
    В моем случае это дало мне лучше, чем присоединиться
Показать ещё 2 комментария
0
select i.instituteId, i.instituteName, i.description,
r.name,r.review, r.timestamp
from institutions i inner join reviews  r on i.instituteId=r.instituteId
WHERE instituteId IN ('1','2','3') 
ORDER BY timestamp DESC LIMIT 1
  • 0
    Как насчет небольшого объяснения кода?
0

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

Синтаксис: SELECT column_name (s) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;

Решение: SELECT i.instituteId, i.instituteName, i.description, v.name, v.review, v.timestamp FROM заведения я INNER JOIN отзывы v на i.instituteId = v.instituteId WHERE i.instituteId IN ('1', '2', '3') И v.instituteId = 1 ORDER BY v.timestamp DESC LIMIT 1;

Ещё вопросы

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