I shif back the database to a few days back and check the equal sql statement, it is:
SELECT DISTINCT p.entity_id FROM `catalog_product_entity` AS `p`
INNER JOIN `catalog_product_flat_4` AS `cpf` ON cpf.entity_id = p.entity_id
LEFT JOIN `catalog_category_product` AS `ccp` ON ccp.product_id = p.entity_id WHERE ( (`ccp`.`category_id` IN ('68')) ) AND (p.entity_id = '3671') LIMIT 1
As you see this is the part that missing from sql statement:
`ccp`.`category_id` IN ('68')
The category id=68 exist in the list of categories, any idea what's missing here caused this error?