Запрашивать таблицу PostgreSQL 9.0 по значению внешнего ключа?
-
16-10-2019 - |
Вопрос
Вопрос для новичков:
Допустим, у меня есть два столика с конфетами и цветами.Таблица цветов содержит только пары код / значение, такие как 01 желтый, 02 синий, 03 зеленый и т.д.и ссылается в таблице candies с помощью кода.
Как мне запросить таблицу candies для всех синих конфет без явного объединения?Вот уже два года я пишу эти запросы с помощью объединений, например:
ВЫБЕРИТЕ * ИЗ конфет a, СОЕДИНИТЕ цвета o ON(a.color_code = o.color_code)
ГДЕ o.color_value = 'синий';
Я каждый раз уверен, что беру с собой пистолет на поножовщину, но мои поиски в гугле оказались безрезультатными.
Спасибо.
Решение
«Я уверен, что каждый раз, когда я приношу пистолет в борьбу с ножом, но мой гугл был бесплодным». Что заставляет вас думать, что? RDBMS созданы для «присоединения»
Если ваша цель состоит в том, чтобы сделать вас SQL более читаемым, то вы можете предпочесть 'с использованием'синтаксис:
SELECT * FROM candies JOIN colors USING(color_code) WHERE color_value = 'blue';
В качестве альтернативы, видя, что вы жестко кодируете «синий» в свой запрос, вы можете вместо этого рассмотреть жесткий код:
SELECT * FROM candies WHERE color_code = '02';
Но это уменьшит читаемость, если только в вашем сценарии в реальном мире коды не являются описательными (например, Blu 'для синего)
Другие советы
Вы можете написать это следующим образом:
select
ca.*
from
candies ca
where
ca.color_code = (
select co.color_code
from colors co
where co.color_value = 'blue'
)
но никакой разницы быть не должно.На самом деле подход join немного более надежный.
Более того - подумайте о том, чтобы вообще избавиться от таблицы colors и использовать только color_values вместо кодов.На самом деле это более эффективно.