I had the same issue, but on 1.8.1.0, so i tried to update to 1.9.0.1, still the same issue.
But I found why this happens:
This method: Mage_Rule_Model_Condition_Product_Abstract::prepareConditionSql()
Returns a part of a sql-statement, like so: cpf
.sku
IN('SKU')
What's interesting is that the IN contains the exact string that was entered in admin, like so: cpf
.sku
IN('SKU1, SKU2, SKU3')
Note the lack of ' between the SKU's, the string isn't exploded, so it won't find any sku's like that sting.
To fix the issue i modified (copied to local first of course) that method to look like this;
public function prepareConditionSql()
{
$alias = 'cpf';
$attribute = $this->getAttribute();
$value = $this->getValue();
$operator = $this->correctOperator($this->getOperator(), $this->getInputType());
if ($attribute == 'category_ids') {
$alias = 'ccp';
$attribute = 'category_id';
$value = $this->bindArrayOfIds($value);
}
// Andre Klang: This fixes issue with "is one of" & "is not one of"
if(!is_array($value) && in_array($operator,array('()','!()'))) {
$tmp = explode(',',$value);
foreach($tmp as $trim) $values[] = trim($trim);
$value = $values;
}
/** @var $ruleResource Mage_Rule_Model_Resource_Rule_Condition_SqlBuilder */
$ruleResource = $this->getRuleResourceHelper();
return $ruleResource->getOperatorCondition($alias . '.' . $attribute, $operator, $value);
}
I also reported this as a bug to Magento: http://www.magentocommerce.com/bug-tracking/issue/index/id/278
contains
instead ofis one of
? I recalled having problems with the later early on 1.8.