Может быть, вы могли бы упростить это без использования этого CROSS JOIN.
В MySql CROSS JOIN, к сожалению, является синонимом INNER JOIN.
create table fruitMaster (masterIndex int primary key, masterName varchar(30));
insert into fruitMaster (masterIndex, masterName) values
(1, 'apple'),(2, 'banana'),(3, 'mango'),(4, 'melon'),(5, 'grape'), (6, 'prune');
create table fruit (fruitID int primary key, fruitName varchar(30));
insert into fruit (fruitID, fruitName) values
(10,'jonagold'),(20,'straight banana'),(40,'big melons');
create table fruitProperty (
fruitID int, masterIndex int, cpValue int,
primary key (fruitID, masterIndex));
insert into fruitProperty (fruitID, masterIndex, cpValue) values
(10, 1, 1),(10, 2, 1),(10, 6, 1),
(20, 2, 1),(30, 3, 1),(40, 4, 1);
INSERT INTO fruitProperty (fruitID, masterIndex, cpValue)
SELECT F.fruitID, FM2.masterIndex, 1 AS cpValue
FROM fruit F
JOIN fruitProperty FP ON (FP.fruitID = F.fruitID AND FP.cpValue = 1)
JOIN fruitMaster FM1 ON (FM1.masterIndex = FP.masterIndex AND FM1.masterName = 'apple')
JOIN fruitMaster FM2 ON FM2.masterName IN ('banana', 'mango', 'melon', 'grape')
ON DUPLICATE KEY UPDATE cpValue = 2;