SELECT
cert_data.number,
MAX(IF(prop = 'inn', value, NULL)) AS inn,
MAX(IF(prop = 'snils', value, NULL)) AS snils
FROM
cert_data
GROUP BY
number
SET @sql = NULL;
SET @@group_concat_max_len = 5000;
SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(prop = ''',prop,''', value, NULL)) AS `',prop,'`')) INTO @sql FROM cert_data;
SET @sql = CONCAT('SELECT number, ', @sql, ' FROM cert_data GROUP BY number LIMIT 20');
PREPARE stmt FROM @sql;
EXECUTE stmt;
SELECT `recipe_id`, COUNT(*) AS `count` FROM `recipe_product` WHERE (`product_id` = 1 AND `product_weight` > 100) OR (`product_id` = 2 AND `product_weight` BETWEEN 200 AND 400) OR (`product_id` = 3 AND `product_weight` < 10) GROUP BY `recipe_id` HAVING `count` = 3
Если в таблице `recipe_product` пара (`recipe_id`, `product_id`) уникальная, то из данной таблицы можно удалить искусственный ключ `id` и сделать эту пару первичным ключом.
А у вас не было мыслей, что на работу надо не только устроиться, но и работать там?
А если вы не можете ни с нуля написать, ни имеющееся доделать\переделать, то зачем вы на работе?