Проблема с вложенным SQL - PullRequest
0 голосов
/ 16 мая 2011

У меня проблема с вложенным выбором в MySQL.

Этот работает, но мне нужно получить два из них.

Пример:

SELECT `a`.`title` , `a`.`askprice` , `a`.`picture` 
, `a`.`description` , `a`.`userid` , `a`.`id`
FROM (
`mm_ads_fields_values` AS afv
)
LEFT JOIN `mm_ads` AS a ON `a`.`id` = `afv`.`aid`
WHERE `afv`.`value` = '38'
AND `a`.`category` = '227'
AND `a`.`status` =1
AND a.id
IN (
    SELECT a.id
    FROM mm_ads AS a
    LEFT JOIN mm_ads_fields_values AS afv ON afv.aid = a.id
    WHERE afv.value = '2913'
)
ORDER BY `id` DESC
LIMIT 20 

Этот работает. Но мне нужно SQL-выражение вроде этого:

SELECT `a`.`title` , `a`.`askprice` , `a`.`picture` 
, `a`.`description` , `a`.`userid` , `a`.`id`
FROM (
`mm_ads_fields_values` AS afv
)
LEFT JOIN `mm_ads` AS a ON `a`.`id` = `afv`.`aid`
WHERE `afv`.`value` = '38'
AND `a`.`category` = '227'
AND `a`.`status` =1
AND a.id
IN (
   SELECT a.id
   FROM mm_ads AS a
   LEFT JOIN mm_ads_fields_values AS afv ON afv.aid = a.id
   WHERE afv.value = '2913'
)
AND a.id
IN (
    SELECT a.id
    FROM mm_ads AS a
    LEFT JOIN mm_ads_fields_values AS afv ON afv.aid = a.id
    WHERE afv.value = '51'
)
ORDER BY `id` DESC
LIMIT 20 

А этот, последний, не сработает. Его загрузка, загрузка и никогда ничего не происходит ..

Что я делаю не так?

С уважением, Марио

Извините за мой плохой английский ..

1 Ответ

0 голосов
/ 16 мая 2011

Глибный ответ: не должен ли второй оператор IN использовать OR вместо AND? (редактировать: и использовать правильный приоритет оператора.)

...
AND 
( a.id
  IN (
     SELECT a.id
     FROM mm_ads AS a
     LEFT JOIN mm_ads_fields_values AS afv ON afv.aid = a.id
     WHERE afv.value = '2913'
  )
  OR a.id
  IN (
      SELECT a.id
      FROM mm_ads AS a
      LEFT JOIN mm_ads_fields_values AS afv ON afv.aid = a.id
      WHERE afv.value = '51'
  )
)
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...