2012-02-14 19 views
1

の次のようにそれは上記の二つのテーブルからの結果を表示できるように、私は、SQLクエリを書くことができますどのように次のように私は2つのMySQLのテーブルを持っているORDER BYやGROUP BY MySQLのクエリ

[product] table 
P_id | Name | Quantity 
1 | B | 10 
2 | C | 15 
3 | A | 8 

[attribute] table 
P_id | Name | Quantity 
1 | Black | 5 
1 | Red | 5 
2 | Blue | 6 
2 | Black | 9 

: レポート:

P_id | Name | Quantity 
3 | A  | 8 
1 | B  | 10 
1 | Black | 5 
1 | Red | 5 
2 | C  | 15 
2 | Black | 9 
2 | Blue | 6 

[名前]列でソートする必要がありますが、これらは上記のようにP_id列でグループ化する必要があります。 P_idの「グループ化」とは、「互いに同じP_idを持つすべてのレコードを保持する」という意味です。 1つのSQLクエリを使用して上記のように検索することができます。

+1

右、(代わりに、実際の 'GROUP BY'句の)「隣同士に同じ' P_id'を持つすべてのレコードを保つ」あなたは意味「グループ化」によって、明確にするために? – Wiseguy

+0

これら2つのテーブルの関係は何ですか?何を正確に知りたいですか?私の推測はproduct.P_idはattribute.P_idによって参照される外部キーです。正しいの? – AlexS

+1

私が理解しているように、注文は製品の製品名と属性の関連製品名によるものです。最初はモデルが奇妙に見えますが、しばらくするとちょっと意味があります。 – voidengine

答えて

3
SELECT P_id, Name, Quantity FROM (
    SELECT P_id, Name, Quantity, Name as parent, 1 as level 
    FROM product 
    UNION 
    SELECT a.P_id, a.Name, a.Quantity, p.Name as parent, 2 as level 
    FROM attribute a JOIN product p ON a.P_id = p.P_id 
) combined ORDER BY parent, level, Name 
+0

あなたの答えは私の問題を解決できると信じていますが、1つのP_idのすべてのレコードを一緒に表示するわけではありません。同じP_idを持つすべてのレコードをまとめて保存したい。 – Agilox

+1

+1希望の順序を理解するために(もちろん、実際にそれを達成するために) – Wiseguy

+1

が修正され、テストされました:1)MySQLの副選択のエイリアスが必要です。 2)同じP_idを持つ属性をソートするには、名前による順序付けが必要です。 これで、正確に目的の結果が得られます。 – voidengine

0

それは連合操作する必要があり、私はこのように信じている:

select * from product union select * from attribute order Name; 

あなたの出力は任意の列によってグループ化されていないので、あなたは「で `グループが必要書いた理由はわかりません。

+1

最初の投稿の例ではグループ化は表示されません。 – koen

0

あなたは、両方のテーブルの結合が必要なことを意味していますか?あなたは私の友人のグループ化に使用する必要があります

Select P_id, Name, Quantity 
From product 

Union 

Select P_id, Name, Quantity 
From attribute 

Order by 2 
+0

グループがありません – Taryn

+0

wasimchyはグループ化したいと言っていますが、グループ化は必要ありません。 – koen

+0

あなたの例によると、団体は必要なく、組合だけです。製品の量は既にテーブルに載っています。 – Schiavini

0
SELECT * FROM 
(
    SELECT P_id, Name , Quantity FROM product 
    UNION ALL 
    SELECT P_id, Name , Quantity FROM attribute 
) Order by Name 
+0

SELECT *と()は必要ありません – Schiavini

0

: あなたはこれを試すことができます。あなたがそれらをP_IDが注文してから名前を付けたい場合は、これは動作するはず

SELECT * FROM product UNION SELECT * FROM attribute ORDER BY Name, P_id; 
0

:次に、あなたがに注文することができます両方のは、このような列が必要。

(SELECT P_id, Name, Quantity FROM product) 
UNION 
(SELECT P_id, Name, Quantity FROM attribute) 
ORDER BY P_id, Name; 
関連する問題