Как мне вернуть поле в MySQL из подзапроса, связанного с результатами основного запроса?

#mysql #subquery

#mysql #подзапрос

Вопрос:

У меня небольшая проблема с запросом, который я использую в базе данных WordPress. Приведенный ниже запрос возвращает правильные и ожидаемые данные для meta_value , но моя проблема заключается в том, что я не получаю поле, возвращаемое для оригинала post_id из подзапроса, поэтому я не могу связать определенное поле meta_value с оригиналом post_id — возможно, мне потребуется реструктурировать это, но я немного запутался в том, как вернуть эти данные, связанные с найденным meta_value.

 SELECT meta_value
FROM wp_postmeta 
WHERE post_id IN (SELECT meta_value FROM wp_postmeta WHERE post_id IN ('1','2','3','4')) 
AND meta_key = '_wp_attached_file' 
  

Пример данных

 post_id    meta_key            meta_value
1          _thumbnail_id       2
2          _wp_attached_file   image.jpg
  

Итак, в качестве примера, учитывая список из 1 или более идентификаторов post_id (‘1’), я нахожу meta_value (‘2’) и ищу другую запись с соответствующим post_id (‘2’) и указанным meta_key (‘_wp_attached_file’), и мне нужно вернуть оба мета_значения (‘image.jpeg ‘) и исходный post_id (‘1’)

Заранее спасибо

Ответ №1:

Просто используйте самосоединение:

 select wp1.*, wp2.* 
from wp_postmeta wp1, wp_postmeta wp2 
where wp2.post_id in (1,2,3) 
and wp1.meta_value = wp2.post_id and wp2.meta_key = '_wp_attached_file';
  

Комментарии:

1. Спасибо, это как раз то, что я искал. Мне пришлось немного отредактировать его (wp1.post_id в …. вместо wp2), но он отлично справляется со своей задачей.