2

私は現在、ローカルサイトのいくつかの埋め込みSQLクエリに取り組んでいます。そして、私は混乱に直面しています。これを行う必要があります。「ユーザーにメーカーを依頼します。そのメーカーのすべての製品の仕様を印刷します。つまり、モデル番号、製品タイプ、およびそのタイプに適切な関係のすべての属性を印刷します。」

次のクエリを試しました

(SELECT * FROM product NATURAL JOIN pc WHERE maker = '$m') 
union (SELECT * FROM product NATURAL JOIN printer WHERE maker = '$m') 
union (SELECT * FROM product NATURAL JOIN laptop WHERE maker = '$m');

ただし、各テーブル(PC、ラップトップ、プリンター)に同じ列がないという問題が発生します。テーブルにその列が含まれていない場合は、null値を入力するだけで問題が解決すると思います。すべてのテーブルと列を1つのスーパーテーブルにマージして、それをユーザーに表示しようとしています。それでは、商品の種類ごとに大きなテーブルを注文してみたいと思います。これは、クエリの最後にORDERBYを設定するだけだと思います。だから私の質問は、どうすればこれらのテーブルを結合できますか?

関係:

Product(maker, model, type (laptop, printer, pc))
Printer(model, color (0,1), type(ink-jet, laser), price)
Laptop(model, speed, ram, hd, screen, price)
Pc(model, speed, ram hd, price)
4

4 に答える 4

0

「SQL テーブル エイリアス」を参照して、列数の少ないテーブルに列を追加します。または、次のように null を入力することもできます。

Select Col1, Col2, Col3 from Table1
Union
Select Col1, Null as Col2, Null as Col3 from Table2
于 2012-05-16T16:45:24.047 に答える
0

はい、UNION を使用してジョブを実行できます。次のように、すべての SELECT リストを同じ名前と同じ型にするだけです。

SELECT (a,b) FROM TABLE TableB NATURAL JOIN (

    SELECT a,b,c, NULL as d from TableC
    UNION
    SELECT a,b,NULL as c, d from TableD

) AS u ON u.b = TableB.b
于 2012-05-16T16:46:02.027 に答える
0

存在しないフィールドには NULL 値を選択できます。

(SELECT maker,pc.model,p.model,price,NULL AS color,speed,pc.type,pc.type,ram,hd,NULL AS screen
  FROM product p NATURAL JOIN pc WHERE maker = '$m') 
UNION 
(SELECT maker,printer.model,p.model,price,color,NULL AS speed,printer.type,p.type,NULL AS ram,NULL AS hd,NULL AS screen
  FROM product p NATURAL JOIN printer WHERE maker = '$m') 
UNION
(SELECT maker,laptop.model,p.model,price,NULL AS color,speed,laptop.type,laptop.type,ram,hd,screen
  FROM product p NATURAL JOIN laptop WHERE maker = '$m');
于 2012-05-16T16:49:34.673 に答える
-1

union キーワードではなく、join キーワードを使用するつもりだと思います。

http://dev.mysql.com/doc/refman/5.0/en/join.htmlをご覧ください。

于 2012-05-16T16:41:25.133 に答える