1

エイリアスについて質問したところ、FROM句のサブクエリは「AS[エイリアス名]」を入力してエイリアス化する必要があることを知りました。今でも同じ問題に直面しています。

私は4つの関係製品、ラップトップ、PC、およびプリンターに自然に参加しようとしています。

私はSELECT * FROM product NATURAL JOIN pc;とても上手く簡単にできます。しかし、私はやろうとしています

SELECT * FROM product NATURAL JOIN pc, laptop, printer;

私が試したとき、おそらくうまくいかないだろうと私は知っていました。

だから私は現在

SELECT * 
FROM (
 SELECT * FROM (
   SELECT * FROM product NATURAL JOIN pc AS prod_pc
 ) AS prod_pc_lap NATURAL JOIN laptop
) NATURAL JOIN printer;

しかし、私は1248エラーを受け取り続けます。

各リレーションの主キーは「モデル」であることに注意してください。

4

3 に答える 3

0

あなたの場合、内部結合も機能すると思います。とにかく、あらゆる種類の結合で、 if is sameusing(key)の代わりに使用できます。on tbl1.key = tbl2.keykey

したがって、クエリは次のようになります

SELECT *
FROM   product
       INNER JOIN pc
USING  (model)
       INNER JOIN laptop
USING  (model)
       INNER JOIN printer
USING  (model);
于 2012-04-04T06:30:12.560 に答える
0

なぜこのようなものではありません:

SELECT p.model, COALESCE(pr.price, l.price, pc.price, 0) AS price
FROM product p
LEFT OUTER JOIN printer pr ON pr.model = p.model
LEFT OUTER JOIN laptop l ON l.model = p.model
LEFT OUTER JOIN pc ON pc.model = p.model

このCOALESCE()関数は、各引数を順番に評価し、最初に検出した null 以外の値を返します。

于 2012-04-03T21:09:49.840 に答える
0

,節にあるコンマFROMは (多かれ少なかれ) と同等CROSS JOINです。したがって、クエリは次と同等です。

SELECT * 
FROM 
    product 
  NATURAL JOIN 
    pc
  CROSS JOIN
    laptop
  CROSS JOIN 
    printer ;

必要に応じNATURAL JOINて、次のものを使用できます。

SELECT * 
FROM product 
  NATURAL JOIN pc
  NATURAL JOIN laptop
  NATURAL JOIN printer;

上記は、おそらく 0 行を返します (PC、ラップトップ、およびプリンターを同時に使用している場合を除きます)。に置き換えNATURAL JOINて みてくださいNATURAL LEFT JOIN

于 2012-04-03T21:16:11.017 に答える