Условное внутреннее соединение в MySQL

Мне нужно сделать больше внутренних соединений, чтобы иметь таблицу со значением в столбце (вместо множества записей).

Итак, вместо этого:

SELECT U.id,
       U.name,
       FV1.value AS Azienda,
       FV2.value AS AreaManager,
       FV3.value AS Tipologia
FROM `kizgv_users` U
JOIN `kizgv_fields_values` FV1
ON FV1.item_id = U.id AND FV1.field_id = 8
JOIN `kizgv_fields_values` FV2
ON FV2.item_id = U.id AND FV2.field_id = 29
JOIN `kizgv_fields_values` FV3
ON FV3.item_id = U.id AND FV3.field_id = 33

Я пытаюсь сделать это, чтобы улучшить производительность, так как он идет с ошибкой 500

SELECT U.id, U.name, FV1.value as Azienda, FV2.value as AreaManager, FV3.value as Tipologia
FROM kizgv_users U
CASE 
'kizgv_fields_values'.'field_id'
WHEN 
8
THEN
(JOIN kizgv_fields_values FV1 on FV1.item_id = U.id)
WHEN 
29
THEN
(JOIN kizgv_fields_values FV2 on FV2.item_id = U.id)
WHEN 
33
THEN
(JOIN kizgv_fields_values FV3 on FV3.item_id = U.id)

@RaymondNijland спасибо, я пробовал: stackoverflow.com/questions/7674786/mysql-pivot-table и вот это вышло

 create view omni as (
  select
    kizgv_fields_values.*,
    case when field_id = "8" then field_id end as Azienda,
    case when field_id = "29" then field_id end as AreaManager,
    case when field_id = "33" then field_id end as Tipo
  from kizgv_fields_values
);

select * from kizgv_users;

create view pivot as (
  select
    item_id,
    sum(Azienda) as Azienda,
    sum(AreaManager) as AreaManager,
    sum(Tipo) as Tipo
  from omni
  group by item_id
);

select * from pivot;

create view finale as (
  select 
    item_id,
    coalesce(Azienda, 0) as Azienda, 
    coalesce(AreaManager, 0) as AreaManager, 
    coalesce(Tipo, 0) as Tipo
  from pivot 
);

select * from finale;

Тем не менее, у меня нет улучшения производительности по сравнению с несколькими запросами.

Есть способ лучше сделать .. Что-то вроде stackoverflow.com/questions/7674786/mysql-pivot-table или это stackoverflow.com/questions/1241178/mysql-rows-to-columns

Raymond Nijland 13.07.2018 14:05

Не могли бы вы пояснить, что вы пытаетесь сделать? Вы хотите сказать, что ваш запрос множественных объединений делает то, что вы хотите, вы просто ищете другой способ сделать это? если это так, вы можете использовать PIVOT. В противном случае я не совсем понимаю, о чем вы спрашиваете, извините.

matt.dolfin 13.07.2018 14:28

Спасибо всем!

Miriam M. 13.07.2018 14:49

Да, запрос множественных объединений делает то, что я хочу, я просто ищу другой способ сделать это, потому что при его выполнении возникает ошибка 500. Так что я ищу более производительный способ.

Miriam M. 13.07.2018 14:51
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
4
110
0

Другие вопросы по теме