2011-01-23 24 views
0

私のprodiuctカテゴリをメインテーブルから別のテーブルに移動している場合。現時点ではその次のように保存された:SQLを使用して別のテーブルにデータを転送する

ProductId  Product Name  Cat1 Cat2 Cat3 
---------------------------------------------------------------------- 
1   Something One    Y  N  N 
2   Another     N  Y  N 
3   Product Three    Y  N  Y 
4   Final One     N  N  Y 

私の新しいテーブルには、次のようになります。

CatID CatName 
--------------------------- 
1  Cat1 
2  Cat2 
3  Cat3 

ID CatID ProductID 
----------------------------------- 
1 1  1 
2 2  2 
3 1  1 
4 1  3 
5 3  4 

私の質問は、 SQLを使用してこの情報をメインテーブルから新しいテーブルに転送することは可能ですか?私は500以上の製品を持っており、手作業でそれをやっているとは思わない。

答えて

2

確かに...新しいテーブルを持っていると仮定するとIDの自動番号

insert into CatProduct(CatID, ProductID) 
select 1, ProductID 
from Product 
where Cat1 = 'Y' 
union all 
select 2, ProductID 
from Product 
where Cat2 = 'Y' 
union all 
select 3, ProductID 
from Product 
where Cat3 = 'Y' 
+0

完全な感謝、 SQLで – Alex

0

MySQLのクエリを使用してこの種の変換を直接行うことはできますが、外部のスクリプト言語を使用してそれを処理するのはなぜですか? PHP、PythonなどはすべてMySQLライブラリを持っています。

+0

@Cyber​​kiwi: "Squatting"?はい、私が言ったように、私はそれがデータベースサーバーを離れることなく行うことができると確信しています。私が示唆していることは、代替案が「手作業で行う」ことではないということです(質問者が考えるように)。これが一回限りの変換であれば、すぐに完璧なクエリを考えることができない場合は、簡単なスクリプトを一緒にハックしないのはなぜですか? –

+0

@cyberwiki:これは問題に対する答えですが、必ずしも正確な質問ではありません。私はそれが許されていると確信しています。答えが間違っている、不適切な、または間違っていると思うなら、それをdownvote! –

+0

私はPHPでそれを行うことができましたが、SQLでもっと簡単な方法があるかもしれないと思っていました。 – Alex

0

はい、可能です。 STHは、SELECTからのINSERTのようにあります:

INSERT into table1(id, name, fname) 
SELECT id, lname, fname 
FROM authors 
WHERE somecondiction 
1

確かに、あなたのテーブルカテゴリ、製品およびCategoryXProduct(IDがIDとしてdefinnedと)していると仮定すると:

INSERT CategoryXProduct (CatID, ProductID) 
    SELECT 1, ProductId FROM Product WHERE Cat1 = 'Y' 
INSERT CategoryXProduct (CatID, ProductID) 
    SELECT 2, ProductId FROM Product WHERE Cat2 = 'Y' 
INSERT CategoryXProduct (CatID, ProductID) 
    SELECT 3, ProductId FROM Product WHERE Cat3 = 'Y' 
0

商品カテゴリの関係は多対1ですか(この例の行からわかるように)ですか?次に、クエリでこのテーブルとの結合を避けるために、結合テーブルを作成するのではなく、製品のカテゴリIDを商品テーブルの列として追加することを検討することもできます。

関連する問題