MySQL view с транспонированными значениями из другой таблицы - PullRequest
0 голосов
/ 09 января 2019

У меня есть 2 таблицы в базе данных Google Cloud SQL в MySQL, одна с некоторыми ссылками:

+-------+---------+--------+
| ref   | couleur | pack   |
+-------+---------+--------+
| HELLO | NOIR    | 3S2M2L |
| HELLO | WHITE   | 3S2M2L |
| WORLD | RED     | 3SM2ML |
| WORLD | GREEN   | 3SM2ML |
+-------+---------+--------+

Один с несколькими пакетами:

+--------+------+------+------+------+------+
| pack   | S    | M    | L    | SM   | ML   |
+--------+------+------+------+------+------+
| 3S2M2L |    3 |    2 |    2 |    0 |    0 |
| 3SM2ML |    0 |    0 |    0 |    3 |    2 |
+--------+------+------+------+------+------+

Мне нужен список существующих ссылок с размерами:

+-------+---------+--------+
| ref   | couleur | taille |
+-------+---------+--------+
| HELLO | NOIR    | S      |
| HELLO | NOIR    | M      |
| HELLO | NOIR    | L      |
| HELLO | WHITE   | S      |
| HELLO | WHITE   | M      |
| HELLO | WHITE   | L      |
| WORLD | RED     | SM     |
| WORLD | RED     | ML     |
| WORLD | GREEN   | SM     |
| WORLD | GREEN   | ML     |
+-------+---------+--------+

Я пытаюсь описать случай, когда это так, но, похоже, когда я добавляю еще один «случай, когда» заменяет «ноль», это выдает мне ошибку.

select 
    r.ref, 
    r.couleur,
    (case when p.S > 0 then '  S' else null end
    ) as 'taille'
from _refs r
left join _packs p on r.pack = p.pack
;

Я начинаю SQL, большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 09 января 2019

Размеры одежды (?) Жестко заданы в вашей модели базы данных. Решение состоит в объединении пяти отдельных запросов, например:

select * from (
  select r.ref, r.couleur, 'S' as taille 
    from _refs r join _packs p on p.pack = r.pack and p.s > 0
  union
  select r.ref, r.couleur, 'M'
    from _refs r join _packs p on p.pack = r.pack and p.m > 0
  union
  select r.ref, r.couleur, 'L'
    from _refs r join _packs p on p.pack = r.pack and p.l > 0
  union
  select r.ref, r.couleur, 'SM'
    from _refs r join _packs p on p.pack = r.pack and p.sm > 0
  union
  select r.ref, r.couleur, 'ML'
    from _refs r join _packs p on p.pack = r.pack and p.ml > 0
) x
order by ref, couleur, taille
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...