2013-03-08 2 views
2

У меня есть следующий запрос:WHERE [1 из этих значений] в [1 из этих значений]

SELECT A.id FROM logsen_alertes A 
WHERE 
(SELECT LA2.type_colocation_id 
    FROM logsen_liaisons_annonces_types_colocations LA2 
    WHERE LA2.annonce_id = 25 AND LA2.annonce_type = 4 
) 
IN 
(SELECT L4.souhait 
    FROM logsen_liaisons_alertes_souhaits L4 
    WHERE L4.alerte_id = A.id 
) 

Этот запрос работает хорошо, когда мой первый подзапрос возвращает только 1 значение, потому что это, как работает IN() , ища 1 уникальное значение в наборе значений. Когда мой первый подзапрос возвращает 2 или более значений, MySQL возвращает мне «Subquery возвращает более 1 строки». Как заставить мой запрос работать, когда первый подзапрос возвращает несколько значений? Что-то вроде «WHERE [любое из этих значений], которое я нашел в [ny этих значений]»?

ответ

1

Try:

SELECT DISTINCT A.id FROM logsen_alertes A 
JOIN logsen_liaisons_alertes_souhaits L4 ON L4.alerte_id = A.id 
JOIN logsen_liaisons_annonces_types_colocations LA2 
    ON LA2.type_colocation_id = L4.souhait AND LA2.annonce_id = 25 AND LA2.annonce_type = 4 
1

Попробуйте это:

SELECT 
     A.id 
FROM 
     logsen_alertes A 
     INNER JOIN logsen_liaisons_alertes_souhaits L4 
       ON L4.alerte_id = A.id 
     INNER JOIN logsen_liaisons_annonces_types_colocations LA2 
       ON LA2.type_colocation_id = L4.souhait 
WHERE 
     LA2.annonce_id = 25 AND LA2.annonce_type = 4 
0
SELECT DISTINCT A.id FROM logsen_alertes AS A 
INNER JOIN logsen_liaisons_alertes_souhaits AS L4 
     ON (L4.alerte_id = A.id) 
INNER JOIN logsen_liaisons_annonces_types_colocations AS LA2 
     ON (LA2.type_colocation_id = L4.souhait) 
WHERE LA2.annonce_id = 25 AND LA2.annonce_type = 4 

Должно работать

+0

работает как шарм. Я предпочел этот ответ другому, потому что я слышал, что каждое ограничение запроса должно быть помещено в WHERE вместо JOIN. – VaN

+0

@ user2083586 - Не знаю, где вы слышали эту ерунду. Пожалуйста, удалите это из своего ума - это старая школа –

+0

Тогда я не понимаю, почему вы положили «LA2.annonce_id = 25 AND LA2.annonce_type = 4» в инструкцию WHERE вместо того, чтобы поместить ее в оператор JOIN. Не могли бы вы прояснить этот выбор? – VaN

Смежные вопросы