@denism300

Как в SQL проверить находится ли элемент в двух массивах?

Есть запрос:
SELECT ID 
FROM wp_posts 
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) 
INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) 
WHERE wp_term_relationships.term_taxonomy_id IN (43)
AND
wp_term_relationships.term_taxonomy_id IN (89)

Однако, выдает пустой результат.
Но если сделать запрос вида:
SELECT ID 
FROM wp_posts 
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) 
INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) 
WHERE wp_term_relationships.term_taxonomy_id IN (43)

или
SELECT ID 
FROM wp_posts 
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) 
INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) 
WHERE wp_term_relationships.term_taxonomy_id IN (43)

то выводятся одни и те же ID.
Как исправить запрос, если нужно учесть, что ID должен принадлежать одновременно как массиву, который может быть вместо 43, так и массиву, который может быть вместо 89?
  • Вопрос задан
  • 185 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT *
  FROM `wp_posts`
  WHERE `ID` IN (
    SELECT `object_id`
      FROM `wp_term_relationships`
      WHERE `term_taxonomy_id` IN (43, 89)
      GROUP BY `object_id`
      HAVING COUNT(*) = 2
    )
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@d-stream
Готовые решения - не подаю, но...
пока общий запрос звучит "стой там, иди сюда" никогда значение не будет одновременно и 43 и 89

а вот если обернуть два последних запроса в exists - то тогда уже можно получить желаемое:

if exists(select...where 43) and exists(select ... where 89) - даст положительный результат если данные будут и в первом и во втором запросе

ну или могу предложить извращенные варианты с union)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы