Дважды выберите в одном запросе и где

#mysql

#mysql

Вопрос:

У меня проблема с моим запросом.

Мой запрос выглядит следующим образом:

 SELECT 
            Tab1.`name`,
            Tab1.`removed`,
            Raq.`removed`,
            Raq.`type`,
            (select `value` from `raq_add` where `raq_id` = `Tab1`.`raq_id` and `key` = 'v') as `v`

FROM `reservation` `Reservation`
            left join `tab1` `Tab1` on `Tab1`.`id` = `Reservation`.`tab1_id`
            left join `raq` `Raq` on `Raq`.`id` = `Tab1`.`raq_id`
 WHERE 1
 

Хорошо, этот запрос работает отлично, но мне нужно добавить переменную в where следующим образом:

 WHERE `v` = 4
 

Полный код:

 SELECT 
            Tab1.`name`,
            Tab1.`removed`,
            Raq.`removed`,
            Raq.`type`,
            (select `value` from `raq_add` where `raq_id` = `Tab1`.`raq_id` and `key` = 'v') as `v`

FROM `reservation` `Reservation`
            left join `tab1` `Tab1` on `Tab1`.`id` = `Reservation`.`tab1_id`
            left join `raq` `Raq` on `Raq`.`id` = `Tab1`.`raq_id`
 WHERE `v` = 4
 

Я знаю, что должен добавить эту переменную для выбора:

 (select `value` from `raq_add` where `raq_id` = `Tab1`.`raq_id` and `key` = 'v' and `value` = 4) as `v`
 

Но тогда поля, которые value ! = 4

Они отображаются как null, и я не хочу их вообще отображать или показывать, что они отличаются от v или value не отображаются

Ответ №1:

Если вам нужны только совпадающие строки, используйте Inner Join вместо left join

 SELECT 
            Tab1.`name`,
            Tab1.`removed`,
            Raq.`removed`,
            Raq.`type`,
            (select `value` 
                from `raq_add` 
                where `raq_id` = `Tab1`.`raq_id` and `key` = 'v') as `v`

FROM `reservation` `Reservation`
            INNER join `tab1` `Tab1` on `Tab1`.`id` = `Reservation`.`tab1_id`
            INNER join `raq` `Raq` on `Raq`.`id` = `Tab1`.`raq_id`
 WHERE  (select `value` 
                from `raq_add` 
                where `raq_id` = `Tab1`.`raq_id` and `key` = 'v') = 4
 

Ответ №2:

Просто оберните запрос другим select, тогда вы сможете фильтровать по нему в WHERE предложении :

 SELECT * 
FROM (Your Query Here) t 
WHERE t.v = 4