Возможно ли создать SQL-запрос с определенными условиями?

Как я могу изменить мой запрос, чтобы получить значение свойства автора статьи (свойство с id равным 10) из таблицы articles_property и связать его с полем name из таблицы articles, используя соответствие article_id и id? Я хочу переименовать полученное значение в "author".
  • 27 сентября 2023 г. 23:37
Ответы на вопрос 2
Да, создание SQL-запроса с такими условиями возможно. 

Вот пример SQL-запроса, который выполняет описанное действие:

```sql
SELECT a.name AS article_name, ap.value AS author
FROM articles a
JOIN articles_property ap ON a.id = ap.article_id
WHERE ap.id = 10;
```

В этом примере мы используем оператор JOIN для объединения таблицы "articles" и "articles_property" по полю "id" в таблице "articles" и полю "article_id" в таблице "articles_property". Затем мы выбираем столбец "name" из таблицы "articles" и столбец "value" из таблицы "articles_property" с условием, что значение столбца "id" в таблице "articles_property" равно 10. В итоге, полученное значение столбца "value" переименовывается в "author" с помощью ключевого слова "AS".
Если вы хотите создать универсальный запрос, который не зависит от состава свойств, то вам понадобится многострочный запрос. В этом случае вам нужно будет собрать все свойства в массив в той среде, из которой вы обращаетесь к базе данных. Используйте следующий запрос:

select 
  ar.id, 
  ar.name, 
  ar.date, 
  ar.text,
  ap.property_id,
  p.name as property_name,
  ap.value as property_value
from  articles as ar
left join articles_property as ap on  ap.article_id = ar.id
                                                        and ap.property_id in (/* перечислите все необходимые свойства */) 
left join property as p on  ap.property_id = p.id

Если вам необходимо просто получить конкретные значения свойств и вам не нужна универсальность по набору свойств, то вы можете использовать следующий запрос:

select 
  ar.id, 
  ar.name, 
  ar.date, 
  ar.text,
 (select value
    from articles_property as ap
  where ap.article_id = ar.id
      and ap.property_id = 10) as author
from  articles as ar
Похожие вопросы