#sql #database #postgresql
#sql #База данных #postgresql
Вопрос:
У меня следующая структура таблицы
Я хотел бы выбрать post_id из любых доступных данных short_name (название страны), name (таблица состояний) или region_name. Выполнение следующего запроса дает истинный результат для region_name, но не для short_name (название страны), name (таблица состояний).
select *
from t_post_city
inner join t_region on t_region.region_id = t_post_city.city_id
inner join t_country on t_region.country_id = t_country.country_id
inner join t_states on t_region.province_id = t_states.state_id
where t_country.short_name like %india%
or t_states.name like %rajasthan%
or t_region.region_name like %sitapura%
Скажите мне, пожалуйста, где я ошибаюсь!
Комментарии:
1. Вы используете MySQL или Postgresql? (Не помечайте продукты, которые не задействованы.)
2. извините, мой запрос si select * from t_post_city внутреннее соединение t_region с t_region.region_id = t_post_city.city_id внутреннее соединение t_country с t_region.country_id = t_country.country_id внутреннее соединение t_states с t_region. province_id = t_states.state_id где t_country.short_name, например %india% или t_states. имя, например %rajasthan% или t_region.region_name, например %sitapura%
3. На самом деле это postgres
Ответ №1:
select *
from t_post_city
LEFT OUTER join t_region on t_region.region_id = t_post_city.city_id
LEFT OUTER join t_country on t_region.country_id = t_country.country_id
LEFT OUTER join t_states on t_region.province_id = t_states.state_id
where t_country.short_name like '%india%'
or t_states.name like '%rajasthan%'
or t_region.region_name like '%sitapura%'
Ответ №2:
Используйте отдельное табличное выражение для каждого из трех ваших критериев. Напишите свою OR
логику, используя UNION
в SQL:
select post_id
from t_post_city
inner join t_region on t_region.region_id = t_post_city.city_id
where t_country.short_name like %india%
t_region.region_name like %sitapura%
union
select post_id
from t_post_city
inner join t_region on t_region.region_id = t_post_city.city_id
inner join t_country on t_region.country_id = t_country.country_id
where t_country.short_name like %india%
union
select post_id
from t_post_city
inner join t_region on t_region.region_id = t_post_city.city_id
inner join t_states on t_region.province_id = t_states.state_id
where t_states.name like %rajasthan%;