У меня есть эта таблица:Mysql Возвращает строку, только если все его дети выбирают
CREATE TABLE `test` (
`id` VARCHAR(50) NOT NULL,
`parent` VARCHAR(50) NULL DEFAULT NULL,
`true` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `FK_test_test` (`parent`),
CONSTRAINT `FK_test_test` FOREIGN KEY (`parent`) REFERENCES `test` (`id`) ON UPDATE CASCADE ON DELETE CASCADE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
У меня есть эти данные:
INSERT INTO `test` (`id`, `parent`, `true`) VALUES
('.', '.', NULL),
('active1', 'if', NULL),
('active2', 'if', NULL),
('check1', 'active1', 'case1'),
('check2', 'active1', 'case2'),
('check5', 'active1', 'case4'),
('check3', 'active2', 'case1'),
('check4', 'active2', 'case3'),
('if', '.', NULL);
У меня есть этот запрос:
SELECT a.`parent` FROM test a
INNER JOIN (test b) ON a.`parent` = b.`id` AND b.`parent` = 'if'
WHERE a.`true` IN ('case1','case2', 'case4')
GROUP BY a.`parent`;
В результирующем наборе я получаю active1, active2
, но у меня должно быть только active1
, потому что мне нужен a.parent
, только если выбраны все его дети.
Как я могу получить строку, только если выбраны все ее дети?
+1 для получения схемы и данных в сценарии! – Szymon