1

2つのテーブルからいくつかの列を選択するクエリがあります。このテーブルには、実際には空のセルが含まれている必要がありますが、クエリで名前を付ける必要があります。

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';

これはlibフォルダーに2.5MBサイズのテキストファイルを生成するのに完全に機能しますが、別のテーブルから1つの列を追加し、タイトルのある空の列を追加する必要がある別のクエリの次のコードは機能しているようですが、ファイルサイズは約11GB、

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';

この問題をデバッグするための助けはかなりありますが、mysqlについてはよく知らないので、詳細な説明を歓迎します。2つのテーブルから最初に機能するコードに類似したコードを作成する方法はありますか?t2テーブルの1つの列、つまりis_in_stockが必要です。

4

1 に答える 1

1

したがって、最初のクエリはWHERE句を使用した単純なクエリSELECT INTOであり、これにより少数の結果が返されます。

2つ目は暗黙の内部結合を示していますが、一意の行に基づいて値を返すことはなく、両方のテーブルで一致しているかどうかに関係なく、両方のテーブルからすべてをプルするだけです。

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';

これは私が行う方法ですが、それでも各レコードを分離する必要があるため、各行を一意にし、内部結合t2 ON t1.name = t2.nameのように、t1とt2の間のフィールドで内部結合ONを実行します。 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\';

それが役に立てば幸い!

于 2012-06-18T14:14:06.063 に答える