Thalassicus
Bytes and Nibblers
Code:
for promotionInfo in GameInfo.Unit_FreePromotions(
"SUBSTR(PromotionType,-7)<>'PENALTY'"
) do
for overrideInfo in GameInfo.Civilization_UnitClassOverrides(
"UnitType='"..promotionInfo.UnitType.."'
AND CivilizationType<>'CIVILIZATION_BARBARIAN'"
) do
DB.Query("UPDATE UnitPromotions SET LostWithUpgrade='false' WHERE Type='"..promotionInfo.PromotionType.."'")
end
end
I basically need to translate this nested for loop to sql. How do I properly use "join"? I've got this so far... but something's wrong.

Code:
UPDATE UnitPromotions
SET LostWithUpgrade = 'true'
WHERE ( PediaType = 'PEDIA_ATTRIBUTES'
OR SUBSTR(Type,-7) = 'PENALTY'
OR Type = 'PROMOTION_ROUGH_TERRAIN_ENDS' -- penalty
OR Type = 'PROMOTION_ONLY_DEFENSIVE' -- penalty
OR Type = 'PROMOTION_MUST_SET_UP' -- penalty
OR Type = 'PROMOTION_CITY_SIEGE' -- demolish
AND NOT Type = 'PROMOTION_INDIRECT_FIRE' -- earned
AND NOT Type = 'PROMOTION_CAN_MOVE_AFTER_ATTACKING' -- not important
AND NOT Type = 'PROMOTION_DESERT_POWER' -- barbarians
AND NOT Type = 'PROMOTION_ARCTIC_POWER' -- barbarians
AND NOT Type = 'PROMOTION_GUERRILLA' -- barbarians
AND NOT Type IN (
SELECT PromotionType
FROM Unit_FreePromotions
JOIN Civilization_UnitClassOverrides
ON ( Civilization_UnitClassOverrides.PromotionType = Unit_FreePromotions.PromotionType
AND Civilization_UnitClassOverrides.CivilizationType <> 'CIVILIZATION_BARBARIAN'
)
);
Everything works if I comment out the "AND NOT Type IN" section.