Sql запросить перекрестное преобразование или поворот? - PullRequest
0 голосов
/ 18 июня 2020

У меня есть такой запрос для MySql базы данных:

    SELECT
    pim_pimcore_database.object_query_RGL.rulecode AS "rulecode",
    pim_pimcore_database.object_query_RGL.DescrizioneRegola AS "rule_desc",
    pim_pimcore_database.object_relations_RGL.position AS "id",
    pim_pimcore_database.objects.o_classId,
    pim_pimcore_database.objects.o_key,
    pim_pimcore_database.object_collection_ruleIF_RGL.Operatore,
    pim_pimcore_database.object_collection_ruleIF_RGL.Concatenatore
    FROM
    pim_pimcore_database.object_query_RGL
    LEFT JOIN pim_pimcore_database.object_relations_RGL
    ON pim_pimcore_database.object_query_RGL.oo_id = 
    pim_pimcore_database.object_relations_RGL.src_id 
    LEFT JOIN pim_pimcore_database.objects
    ON pim_pimcore_database.object_relations_RGL.dest_id = pim_pimcore_database.objects.o_id 
    LEFT JOIN pim_pimcore_database.object_collection_ruleIF_RGL
    ON pim_pimcore_database.object_relations_RGL.position = 
    pim_pimcore_database.object_collection_ruleIF_RGL.`index`
    AND pim_pimcore_database.object_relations_RGL.src_id = 
    pim_pimcore_database.object_collection_ruleIF_RGL.o_id
    GROUP BY
    pim_pimcore_database.object_relations_RGL.position AS "ID"
    WHERE
    pim_pimcore_database.object_query_RGL.oo_id = 1042 AND 
    pim_pimcore_database.object_relations_RGL.ownername ="IfStatement"

Это дает мне такой результат enter image description here

, но мне нужна другая таблица, например enter image description here

Кто-нибудь может мне помочь? Спасибо в adv

M

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Не ответ; слишком долго для комментария ...

FWIW, я считаю это немного более читаемым ...

SELECT DISTINCT q.rulecode rulecode
              , q.DescrizioneRegola rule_desc
              , r.position id
              , o.o_classId
              , o.o_key
              , c.Operatore
              , c.Concatenatore
           FROM pim_pimcore_database.object_query_RGL q
           JOIN pim_pimcore_database.object_relations_RGL r
             ON q.oo_id = r.src_id 
           LEFT 
           JOIN pim_pimcore_database.objects o
             ON r.dest_id = o.o_id 
           LEFT 
           JOIN pim_pimcore_database.object_collection_ruleIF_RGL c
             ON r.position = c.index
            AND r.src_id = c.o_id
          WHERE q.oo_id = 1042 
            AND r.ownername = "IfStatement"
0 голосов
/ 18 июня 2020

Ваш декартово произведение (удвоение строк), по-видимому, происходит от объединения pim_pimcore_database.objects по o_id.

Если вместо этого вы представляете эту таблицу дважды в запросе (присоединяете ее дважды) с соответствующими псевдонимами и предикатом который выбирает только те типы o_classid, относящиеся к этому псевдониму, декартово исчезнет, ​​и вы получите искомый результат:

SELECT 
  ...,
  o_opt.key as OPT,
  o_com.key as COM,
  ...

LEFT JOIN pim_pimcore_database.objects o_opt ON ... AND o_opt.o_classid = 'OPT'
LEFT JOIN pim_pimcore_database.objects o_com ON ... AND o_com.o_classid = 'COM'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...