Мое понимание, что с помощью «c» вы имели в виду «i» и «d» вы имели в виду «f»
Ниже этого.
Он определяет те Прод-х, которые находятся в «я» группе, но не в группе «F»
SELECT Prod
FROM (
SELECT Prod,
CONCAT('|', GROUP_CONCAT_UNQUOTED(group, '|'), '|') AS list
FROM YourTable
GROUP BY Prod
)
WHERE list CONTAINS '|i|'
AND NOT list CONTAINS '|f|'
Вы можете проверить это с ниже
SELECT Prod
FROM (
SELECT
Prod,
CONCAT('|', GROUP_CONCAT_UNQUOTED(group, '|'), '|') AS list
FROM
(SELECT 'prod1' AS Prod, 'i' AS group),
(SELECT 'prod1' AS Prod, 'f' AS group),
(SELECT 'prod1' AS Prod, 'f' AS group),
(SELECT 'prod2' AS Prod, 'i' AS group),
(SELECT 'prod3' AS Prod, 'i' AS group),
(SELECT 'prod4' AS Prod, 'i' AS group),
(SELECT 'prod4' AS Prod, 'f' AS group),
(SELECT 'prod4' AS Prod, 'f' AS group),
(SELECT 'prod4' AS Prod, 'f' AS group),
GROUP BY Prod
)
WHERE list CONTAINS '|i|'
AND NOT list CONTAINS '|f|'
так что вы окончательный запрос может выглядеть как
SELECT <list of needed fields>
FROM YourTable
WHERE Prod IN (
SELECT Prod
FROM (
SELECT Prod,
CONCAT('|', GROUP_CONCAT_UNQUOTED(group, '|'), '|') AS list
FROM YourTable
GROUP BY Prod
)
WHERE list CONTAINS '|i|'
AND NOT list CONTAINS '|f|'
)
Запросы abouve были очень полезны при построении того, что я хотел. благодаря – rbkk2016