Ok, you are trying to create a query that will "fill-in" each record from the Zones table by replacing each origin
and destination
component with its corresponding two digit country code. In other words you are decoding the origin and destination data. You can execute a Join on the Zones table twice: once to fill in the origin and a second time for the destination.
You can break it down into two queries:
Decode the origin by joining the Zones table with the Country Codes table.
e.g.
SELECT *
FROM Zones, Country Codes
WHERE origin = integerCode
This creates a temporary table where each row contains the following columns:
(origin, destination, col3, col4, integerCode, twoDigitCode, fullName)
Decode the destination using the same process. That is, Join the table created from step 1 with the Country Codes table again but this time the WHERE clause should match the destination to the integerCode.
DISCLAIMER: I am a student, not an expert. I make no claims to the efficiency, accuracy, or correctness of my solutions.