2011-02-08 11 views
1

私は複数のテーブルに主キーを参照して値を取得しようとしているが、result.Hereを取得できませんが、テーブル複数の参照は

濃度テーブル

**de_id density color** 
    1 21 red 
    2 22 blue 
    3 23 green 
    4 24 yellow 
    5 25 orange 

サイズです表

**si_id length breadth** 
1  21  41 
2  22  42 
3  23  43 
4  24  44 
5  25  45 

Order_de表

**or_id density color length breadth** 
1  1   2  3  4 
2  4   3  2  1 

私が動作するようにしようとしているクエリが

SELECT density.density,density.color,size.length,size.breadth,order_de.or_id from 
    density,size,order_de WHERE order_de.density=density.de_id and 
    order_de.color=density.de_id and order_de.length=size.si_id and 
    order_de.breadth=size.si_id order by order_de.or_id asc 

は、所望の結果が

density color length breadth or_id 
    21 blue  23 44  1 
    24 green  22 41  2 

あるべきである。しかし、クエリは何も取得しません。 誰でも助けることができますか?

+1

なぜこのスキーマは私にとって意味がないのですか?それは一般的ですか? – Nishant

+0

@Nishant:一見無関係な属性(密度、色)を同じテーブル、特に同じIDに格納することは、ほとんど意味がありませんでした。 –

+0

@Joe Stefanelliそれは密度と色の化学物質のテーブルかもしれません。しかし、データが抽出される必要がある方法は私の頭を回転させる。彼は一つのテーブルの属性を二つの行にしたい。密度21は赤ではなく、色の青は値21の密度と同じではありません。私は考えています:1つの行は1つの項目を表し、FKは単なるポインタです。なぜ属性を混ぜたいのですか? – Nishant

答えて

1

密度、色、長さ、幅の各属性ごとにテーブルに個別に参加する必要があります。また、暗黙的な結合スタイルは使用しないでください。私はそれがこのクエリを作成する際の混乱に貢献したと思います。

SELECT d1.density, d2.color, s1.length, s2.breadth, o.or_id 
    FROM Order_de o 
     INNER JOIN Density d1 
      ON o.density = d1.de_id 
     INNER JOIN Density d2 
      ON o.color= d2.de_id 
     INNER JOIN Size s1 
      ON o.length = s1.si_id 
     INNER JOIN Size s2 
      ON o.breadth = s2.si_id 
    ORDER BY o.or_id asc 
関連する問題