0

MySqlに対してクエリを実行しようとしています

SELECT model, price
FROM (SELECT *
      FROM product
      LEFT JOIN printer, laptop, pc
      ON product.model = printer.model = laptop.model = pc.model)

これが適切な構文ではないことはわかっています。すべての製品のモデルと価格を見つけようとしています。最初に各リストを製品に自然結合しようとしましたが、最初の自然結合で他の 2 つの製品の他のすべてのタプルが削除され、次の後続の結合ですべてが削除されたため、空のセットができました。

私の本当の質問は、これを行うにはどのタイプの結合を使用すればよいですか?

関係:

商品(メーカー、型式、型式)

ラップトップ(モデル、価格、速度、RAM、HD、スクリーン)

PC(機種、価格、速度、RAM、HD)

プリンター(機種、価格、色、価格)

4

2 に答える 2

0

なぜ SELECT x from (SELECT ...) なのですか? 内側の部分に進みます。

SELECT model, price
FROM product
LEFT JOIN printer, laptop, pc
ON product.model = printer.model = laptop.model = pc.model

したがって、構文エラーがあるため、明らかにこれはまだ機能しません。あなたがする必要があるのは、複数の結合です:

SELECT model, price
FROM product
LEFT JOIN printer ON product.model = printer.model
LEFT JOIN laptop ON product.model = laptop.model
LEFT JOIN pc ON product.model = pc.model

さて、これは有効なクエリですが、プリンター、ラップトップ、PC のそれぞれに価格があるため、データでは機能しないのではないかと思います (したがって、「価格」がどれを意味するかについて混乱するでしょう)。おそらくこれを行うためのより良い方法がありますが、次のことができます。

SELECT model, COALESCE(printer.price, laptop.price, pc.price)
FROM product
LEFT JOIN printer ON product.model = printer.model
LEFT JOIN laptop ON product.model = laptop.model
LEFT JOIN pc ON product.model = pc.model

合体が行うことは、最初の非 NULL 引数を返すことです (したがって、printer.price が null で、laptop.price が null でない場合、laptop.price が返されます)。

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

ここに良い解決策があります:

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

あなたの目的のために、そしておそらくあなたのアプリケーションの目的のために、テーブル構造を拡張できることに注意してください。

テーブルの代わりに:

  • 商品(メーカー・型式・型式)
  • ラップトップ (モデル、価格、速度、RAM、HD、画面)
  • PC (モデル、価格、速度、RAM、HD)
  • プリンター(機種・価格・色)

かもしれない :

  • 商品(メーカー・型式・型式・価格)
  • ラップトップ (モデル、速度、RAM、HD、画面)
  • PC (モデル、速度、RAM、HD)
  • プリンター(型式、色)

あるいは :

  • 商品(メーカー、型式、価格、参考、other_characteristics)

列 [other_characteristics] には、その他の情報の json が含まれています。

于 2012-04-03T21:20:22.337 に答える