Несколько запросов в одном MySQL (с использованием данных или нет) - PullRequest
0 голосов
/ 17 октября 2018

В моей базе данных у меня есть 4 таблицы:

Основная таблица:

P(T_P, T, P, title)

И еще 2 ссылки на таблицы с T_P:

E(T_P, EE, AA, BB)
G(T_P, CC, DD, EE)

И еще однаtable D, с аргументом TYPE.

В моем результате я хотел бы иметь 3 столбца на основе типа 3.

Для отображения я использую датированные данные со стороны сервераобработки, потому что таблица P имеет 500 000 строк.

На самом деле, без данных я использую 4 различных запросов:

  • Один для получения таблицы P, таблицаD и таблица E аргументы.
  • Один для получения таблицы D с типом A
  • Один для получения таблицы D с типом B и
  • Один для получения таблицы D с типом C.

Они отлично работают, но мне нужно использовать datatable.

Я не знаю, достаточно ли я ясен, поэтому я нарисовал небольшую схему.

All examples

Ответы [ 2 ]

0 голосов
/ 17 октября 2018
SELECT P.T_P,
       P.T,
       P.P,
       P.Title,
       E.EE,
       G.CC,
       MAX(CASE WHEN D.Type = 'A' THEN X END) as A,
       MAX(CASE WHEN D.Type = 'B' THEN X END) as B,
       MAX(CASE WHEN D.Type = 'C' THEN X END) as C
FROM P 
LEFT JOIN E ON P.T_P = E.T_P
LEFT JOIN G ON P.T_P = G.T_P
LEFT JOIN D ON P.T = D.T 
         AND P.P = D.P 
GROUP BY 
       P.T_P,
       P.T,
       P.P,
       P.Title,
       E.EE,
       G.CC
0 голосов
/ 17 октября 2018

Это должно приблизить вас к тому, что вам нужно.Могу я спросить, почему вы не используете подробные имена для таблиц / столбцов?Вы просто делаете свою собственную жизнь, и жизнь того, кто возьмет на себя этот проект в следующий раз, намного сложнее.

SELECT tP.T_P,
       tP.T,
       tP.P,
       tP.Title,
       tE.EE,
       tG.CC,
       tDa.X AS A,
       tDb.X AS B,
       tDc.X AS C
FROM P AS tP
LEFT JOIN E AS tE ON tP.T_P = tE.T_P
LEFT JOIN G AS tG ON tP.T_P = tG.T_P
LEFT JOIN D AS tDa ON tP.T = tDa.T AND tP.P = tDa.P AND tDa.Type = 'A'
LEFT JOIN D AS tDb ON tP.T = tDb.T AND tP.P = tDb.P AND tDb.Type = 'B'
LEFT JOIN D AS tDc ON tP.T = tDc.T AND tP.P = tDc.P AND tDc.Type = 'C'

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...