Запрашивать таблицу PostgreSQL 9.0 по значению внешнего ключа?

dba.stackexchange https://dba.stackexchange.com/questions/2431

  •  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 вместо кодов.На самом деле это более эффективно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top