2012-06-18 1 views
1

У меня есть запрос, чтобы выбрать несколько столбцов из двух таблиц, которые должны содержать некоторые клетки, которые на самом деле пустые, но должно назвать его в запросе, такие какMysql запрос возвращает чрезвычайно большой файл

select name, REPLACE(format, ' – ', '/') as format, CAST(price AS UNSIGNED INTEGER) as price, CONCAT('http://example.com/',url_key) as url, level_id_value, delivery, sku from t1 where delivery <> 'slut' INTO OUTFILE 'test.txt' FIELDS TERMINATED BY '\t'; 

которые прекрасно работает создавая текстовый файл размером 2,5 МБ в папке lib, а другой код выглядит следующим образом, где я должен добавить один столбец из другой таблицы вместе с некоторыми пустыми столбцами с некоторым заголовком, похоже, работает, но создает размер файла около 11 ГБ,

sELECT t1.sku, t.name, ' ' as Size, format, ' ' as subcategory, CAST(t1.price AS UNSIGNED INTEGER) as price, ' ' as dummy, CONCAT('http://example.com/',t1.url_key) as url, CONCAT('Från ',t1.level_id_value) as shipping_fee, t2.is_in_stock as stock, ' ' as text1, ' ' as Description from t2,t1 where t1.delivery <> 'slut' INTO OUTFILE 'test.txt' FIELDS TERMINATED BY '\t'; 

любая помощь для отладки этого i ssue будет заметным, не знаю много о mysql, поэтому подробное объяснение приветствуется. Есть ли способ, когда я могу сделать код аналогичным первому рабочему коду из двух таблиц? Мне нужен только один столбец из таблицы t2, то есть is_in_stock.

ответ

1

Итак, первый из них - это простой запрос SELECT INTO с предложением WHERE, это вернет небольшое количество результатов.

Второй показывает неявный внутреннее соединение, но вы Арент возвращения значения на основе уникальной строки, вы просто тянуть все из обеих таблиц, независимо от того, являются ли они соответствия в обеих таблицах

SELECT t1.sku, 
t.name, 
' ' as Size, 
format, 
' ' as subcategory, CAST(t1.price AS UNSIGNED INTEGER) as price, 
' ' as dummy, CONCAT('http://example.com/',t1.url_key) as url, 
CONCAT('Från ',t1.level_id_value) as shipping_fee, 
t2.is_in_stock as stock, 
' ' as text1, 
' ' as Description **`from t2,t1`** 
where t1.delivery <> 'slut' INTO OUTFILE 'test.txt' FIELDS TERMINATED BY '\t'; 

Это то, как я это сделал, но вам все равно нужно изолировать каждую запись, поэтому каждая строка уникальна, а внутреннее соединение - в те поля между t1 и t2, как внутреннее соединение t2 ON t1.name = t2.name и t1.id = t2.id, но он должен выглядеть примерно так

SELECT t1.sku, 
t1.name, 
t1.format, 
CAST(t1.price AS UNSIGNED INTEGER) as price, 
CONCAT('http://example.com/',t1.url_key) as url, 
CONCAT('Från ',t1.level_id_value) as shipping_fee, 
'' as dummy, 
'' as size, 
'' as subcat, 
'' as text1, 
'' as Description, 
t2.is_in_stock as stock, 
from t1 
INNER JOIN t2 WHERE t1.delivery <> 'slut' 
INTO OUTFILE 'test.txt' FIELDS TERMINATED BY 't\'; 

Надеюсь, это поможет!

+0

спасибо, что он работает отлично, без комы после запаса, спасибо, очень mcuch, я буду проверять, как большой файл я получаю от него, и дайте знать. большое спасибо. – tough

+0

you're welcome =) – Hituptony

+0

теперь, когда я проверил размер test.txt снова 9.6 G, с du -sh [file]. не знаю точно, как исправить – tough