0

Productsである 3 つのテーブルからデータをフェッチしたい 1 つの製品に複数の機能と属性がある場合がAttributesあるfeatures

クエリを使用しています

select * 
from products p, features f, attributes a 
where p.id =1 and p.id = f.id and p.id = a.id

クエリがOKかどうか知りたい???

4

5 に答える 5

1

ANSI SQL-89構文を使用しています。ただし、ANSI SQL-92構文を使用することをお勧めします。その例を以下に示します。

SELECT * 
FROM products p 
         INNER JOIN features f 
                ON p.id = f.id 
         INNER JOIN attributes a 
                ON p.id = a.id
where p.id =1

このように、構文エラーを回避するために、それらの関係(句)ON明示的に定義する必要があります。構文はエラーが発生しやすく、ANSI SQL-89エラーが発生しないため、気付かない場合があります。例

SELECT * 
FROM products p, features f, attributes a
where p.id =1

リレーションシップフィールドを定義しなくても実行されますが、無効な結果が得られます。からINNER JOIN、今ですCROSS JOIN

追加情報

        ここで何かを読む
        MySQLJOINチュートリアル

于 2012-08-09T09:09:43.983 に答える
1

これは内部結合です。機能や属性のない製品も取得したい場合は、 を使用する必要がありますLEFT JOINp.feature_idまた、やなどの結合には外部キーを使用する必要がありますp.attribute_id

SELECT * 
FROM products p
LEFT JOIN features f ON p.feature_id = f.id
LEFT JOIN attributes a ON p.attribute_id = a.id
WHERE p.id = 1
于 2012-08-09T09:05:49.877 に答える
1

結合を ANSI として記述して、読みやすくしたい場合があります (ANSI と古い構文のコメントを合図にしてください :) )

select 
    * 
from 
    products p
        left join features f
            on p.id=f.id
        left join attributes a
            on p.id=a.id
于 2012-08-09T09:06:01.713 に答える
0

3つのテーブルすべてのデータをフェッチする必要があるようなタイプの要件には、内部結合を使用する必要があります。次に例を示します。

SELECT p.prduct_id,p.product_name,a.attribute,f.feature
      FROM product AS p
      INNER JOIN attribute AS a ON ( p.product_id = a.attribute_id ) 
      INNER JOIN feature AS f ON ( a.id = f.feature_id ) 

上記のクエリのように、親テーブル製品の属性と機能テーブルに外部キーが必要です。

于 2012-08-09T09:15:36.813 に答える
0

そうではありません。値が逆になっています

SELECT * FROM
  products   p,
  features   f,
  attributes a
WHERE
  p.id = 1    AND
  f.id = p.id AND
  a.id = p.id

しかし、それはあなたが求めていることをしません.ここで3つのクエリを実行する方が良いでしょう.IMO.

于 2012-08-09T09:05:35.473 に答える