DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `vn`.`sale_hasComponentLack`( vSelf INT )RETURNS tinyint(1) READS SQL DATA BEGIN /** * Check if a sales line has all the required components. * * @param vSelf Id de sale * @return BOOL */ DECLARE vHasComponentLack TINYINT(1); WITH componentRequired AS( SELECT COUNT(*) total FROM vn.component WHERE isRequired )SELECT SUM(IF(c.isRequired, TRUE, FALSE)) <> cr.total INTO vHasComponentLack FROM vn.sale s JOIN componentRequired cr LEFT JOIN vn.saleComponent sc ON sc.saleFk = s.id LEFT JOIN vn.component c ON c.id = sc.componentFk WHERE s.id = vSelf; RETURN vHasComponentLack; END$$ DELIMITER ;