MySQL Create Table as SELECT
See also http://www.mysqlperformanceblog.com/2006/07/12/insert-into-select-performance-with-innodb-tables/
if not using replication, can change innodb_locks_unsafe_for_binlog to change this locking behaviour.
Or can dump the data to a file, then reload the data from a file. This also avoids the locks.
Have you tried to do the operation in 2 phases (first Create the table, then Insert the values) and having set the lowest isolation level?:
CREATE TABLE temp_lots_of_data_xxx AS
SELECT
a.*
b.*
c.*
FROM a
LEFT JOIN b ON a.foo = b.foo
LEFT JOIN c ON a.foo = c.foo
WHERE FALSE
INSERT INTO temp_lots_of_data_xxx
SELECT
a.*
b.*
c.*
FROM a
LEFT JOIN b ON a.foo = b.foo
LEFT JOIN c ON a.foo = c.foo