#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