2012-05-02 20 views
1

異なるテーブルの列にIDリストとして格納されている製品の名前を選択しようとしています。私の通常のアプローチは巨大なクエリを作るようにルックアップする20の列があります。誰かがこれを行う簡単な方法を提案できますか?mySQL複数相互参照選択クエリ

Table1: 
id | productName 

Table2 
id | p1 | p2 | p3 | p4... up to p20 

P1 - P20それぞれが、私はTABLE1から対応する商品名と

感謝をP1-P20の交換、table2の中で行を選択する必要がTABLE1

から製品のID番号が含まれています!

+1

あなたは簡潔なクエリまたは単純なものをお探しですか? –

答えて

1

誰かがこれを行う簡単な方法を提案できますか?

私は、これはシンプルな方法だと思います:

SELECT 
    Table2.id, 
    T1.productName, 
    T2.productName, 
    T3.productName, 
    -- etc... 
FROM Table2 
JOIN Table1 T1 ON Table2.p1 = T1.id 
JOIN Table2 T2 ON Table2.p1 = T2.id 
JOIN Table3 T3 ON Table2.p1 = T3.id 
-- etc... 

はい、これは巨大なクエリですが、それは簡単です。


データベース設計を再検討することをお勧めします。ここで提案です:このような

Table1: 
id | productName 

Table2 
id | index | productid 
1 1  p1 
1 2  p2 
1 3  p3 
...etc 

問合せ:

SELECT id, index, productName 
FROM Table2 
JOIN Table1 
ON Table2.productid = Table1.id 
+0

はい、これは私の「通常の」アプローチでした。私はそこにぴったりの方法があるのだろうか? – cronoklee

+0

@cronoklee:もっと奇妙なやり方は、別のテーブルデザインを使うことです。 –

+0

ええ、私は同じ結論に達しています - 新しいテーブルデザインがおそらく最善の策です – cronoklee