2012-01-11 4 views
-2
TABLE 'styles' 
id|style_code 
1|6110 
2|6120 
3|6250 

TABLE 'colour' 
id|colour_code 
1|1001 
2|1012 
3|1033 
4|1050 

TABLE 'styleColour' 
id|style_id|colour_id|cancelled 
1 | 1  | 1  | 
2 | 1  | 2  | y 
3 | 2  | 1  | 
4 | 2  | 3  | 
5 | 2  | 4  | 
6 | 3  | 1  | 
7 | 3  | 2  | 
8 | 3  | 3  | y 
9 | 3  | 4  | y 

TABLE 'orders' 
id|style_code|colour_code 
1 | 6110 | 1001 
2 | 6110 | 1012 
3 | 6130 | 1001 
4 | 6130 | 1033 
5 | 6130 | 1050 
6 | 6250 | 1033 
7 | 6250 | 1050 


Output wanted (based on 'order' table): 
style_code|colour_code|cancelled 
    6110 | 1001  | 
    6110 | 1012  | y 
    6130 | 1001  | 
    6130 | 1033  | 
    6130 | 1050  | 
    6250 | 1033  | y 
    6250 | 1050  | y 

'キャンセル'カラムを 'order'テーブルの適切なstyle_codeとcolour_codeの組み合わせに参照するためにはどのジョインが必要ですか?複数のテーブルジョインを介して参照を返す

style_idとcolour_idで表されるのではなく、 'style_code'と 'colour_code'のデータが表示されているように思われるかもしれませんが、これは理由をインポートするために必要です。

ありがとう、よろしくお願いします。 Derek。

+0

私は 'orders.id'は' styleColour.id'と同じですか?この場合、 'orders'テーブルは完全に冗長です(つまり' style'と 'colour'を使って' styleColour'から再構築することができます)。 –

答えて

0

以下のコメントどおりの答えを更新 - あなたはid列の代わりに、code列(私はidが主キーであると仮定)であることcolours/stylesJOIN Sを作る場合は、しかし、それを

SELECT orders.style_code,orders.colour_code,styleColour.cancelled 
FROM orders 
LEFT JOIN colours ON orders.colour_code=colours.colour_code 
LEFT JOIN styles ON orders.style_code=styles.style_code 
LEFT JOIN styleColour ON styleColour.style_id=styles.id 
         AND styleColour.colour_id=colours.id; 

を主キーが索引付けされるため、高速になる場合があります。

これは私の試みです。私はそれをテストしたが、それを試して与えていない:

SELECT orders.style_code,orders.colour_code,styleColour.cancelled 
FROM styleColour 
RIGHT JOIN colours ON orders.colour_id=colours.id 
RIGHT JOIN styles ON orders.style_id=styles.id 
RIGHT JOIN orders ON orders.style_code=styles.style_code 
         AND orders.colour_code=colours.colour_code; 

それはすべてRIGHT JOIN秒だ理由が何をしているが、すべてのstyleColourとは対照的に、orders内の行に基づいて参加します。

+0

こんにちは数学。コーヒー、私の質問ではっきりしていないことをお詫び申し上げます。表には列の小さな抽出のみが示されています。 styleColoursテーブルは、存在する一意のスタイルと色の組み合わせの完全なリストです。オーダーテーブルは、どのスタイル - 色の組み合わせが顧客によって注文されたか(つまり、同じスタイル - カラーコンボを持つことができますが、顧客によって異なります)です。したがって、styleColoursはordersテーブルと同じではありません(したがって、styleColour.idはorders.idと同じではありません)。 – Derek

+0

さらに、styles.idはstyleColour.style_idと同じで、colours.idはstyleColour.colour_idと同じです – Derek

+0

@Derek ahhです。私は私の答えを更新しました。 –