SQL-запрос для формирования данных

0

Mysql:

Table_A
------------
id name
1  Name1
2  Name2


Table_B
------------
a_id type  value
1    width  100
1    height 100
1    color  red
2    width  50
2    height 80

Неизвестно, сколько значений типа существует в таблице_B.

как получить результат как:

id  name  width height  color
1  Name1  100  100      red
2  Name2  50    80      null
Теги:

3 ответа

1
Лучший ответ
SELECT a.id, a.name, b_Width.value AS width, b_Height.value AS height, b_color.value AS color
FROM Table_A AS a
JOIN Table_B AS b_Width
   ON b_Width.a_id = a.id AND b_Width.type = 'width'
JOIN Table_B AS b_Height
   ON b_Height.a_id = a.id AND b_Height.type = 'height'
JOIN Table_B AS b_Color
   ON b_Color.a_id = a.id AND b_Color.type = 'color'

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

Храните таблицу так, как есть, но затем создайте таблицу с названием "Детали", которая имеет столбцы ширины/высоты/цвета. Или таблицу с названием "Размер" с столбцами ширины/высоты и таблицу "Цвет" с именем цвета или значением RGB. Каждая дополнительная таблица, конечно, имеет FK для таблицы A, которая может или не может использоваться в качестве таблицы PK.

1

Ну, я бы не рекомендовал использовать анти-шаблон EAV для баз данных, поскольку он в основном хранит неструктурированные данные в структурированных базах данных, но мне приходилось сражаться с ним один раз раньше, так что вот что-то намного быстрее, чем внутренние соединения

выберите a.id, a.name, max (случай, когда b.type = 'height', затем b.value end) как высота, max (случай, когда b.type = 'width', затем b.value end) как ширина, max (случай, когда b.type = 'color', затем b.value end) как цвет из test.tablea a, test.tableb b где a.id = b.a_id group by a.id

0

использовать запрос выбора с помощью sub Query

как select id, Name, (выберите тип из таблицы_B, где a_id = table_A.id и type = 'width'), как ширина от table_A

то же самое, что и вы, вы можете добавить другие столбцы, которые вам нужны ОК

Ещё вопросы

Сообщество Overcoder
Наверх
Меню