0

別のテーブルに基づいて2つのテーブルからデータをプルしようとしています。

だから..私はこれらのテーブルを持っています:

 **tblCategory**
 CategoryID, CategoryName

 **tblProdCat**
 prodCatID, productID, categoryID

 **tblProducts**
 productID, description, price

テーブルを結合し、CategoryNameのみを使用してtblProdCatおよびtblProductsから情報を見つける必要があります。

   SELECT tblProducts.name, 
                       tblProducts.description, 
                       tblProducts.price, 
                       tblProducts.qtyInStock, 
                       tblProducts.image,
                       tblProducts.colour,
                       tblProducts.size,
                       tblProducts.style,
                       tblProdCat.prodCatID   
                  FROM
                        tblProducts, tblProdCat,tblCategory 
                  WHERE tblCategory.categoryName='Pens' 
                  AND   tblProdCat.categoryID = tblProducts.categoryID

私は上記を試し、他の結合も試しましたが、髪を引っ張っています。チュートリアルを読みましたが、結合がどのように機能するのか理解できません。誰か助けてもらえますか?お願いします..

4

3 に答える 3

1

JOIN次の構文を使用する必要があります。

SELECT p.name, 
  p.description, 
  p.price, 
  p.qtyInStock, 
  p.image,
  p.colour,
  p.size,
  p.style,
  pc.prodCatID,
  c.CategoryName
FROM tblProducts p
INNER JOIN tblProdCat pc 
  ON p.productID = pc.productID
INNER JOIN tblCategory c
  ON pc.categoryID = c.categoryID
WHERE c.categoryName='Pens' 

INNER JOIN各テーブル間で一致するすべての行を返すbetweeneachテーブルを使用しました。

JOIN構文の学習についてサポートが必要な場合は、ここに結合の優れた視覚的な説明があります。

Productsこれで、カテゴリがあるかどうかに関係なくすべてを返したい場合は、 LEFT JOIN:を使用できます。

SELECT p.name, 
  p.description, 
  p.price, 
  p.qtyInStock, 
  p.image,
  p.colour,
  p.size,
  p.style,
  pc.prodCatID,
  c.CategoryName
FROM tblProducts p
LEFT JOIN tblProdCat pc 
  ON p.productID = pc.productID
LEFT JOIN tblCategory c
  ON pc.categoryID = c.categoryID
  AND c.categoryName='Pens' 
于 2013-03-15T17:06:45.020 に答える
0
You missed to add one more condition.    
 SELECT tblProducts.name, 
                           tblProducts.description, 
                           tblProducts.price, 
                           tblProducts.qtyInStock, 
                           tblProducts.image,
                           tblProducts.colour,
                           tblProducts.size,
                           tblProducts.style,
                           tblProdCat.prodCatID   
                      FROM
                           tblProducts, tblProdCat,tblCategory 
                      WHERE 
                            tblCategory.categoryName='Pens' 
                      **AND   tblProdCat.categoryID = tblCategory.categoryID
                      AND   tblProducts.productID = tblProdCat.productID**
于 2013-03-15T17:17:24.027 に答える
0

これは、一致する行カテゴリ ID を持つレコードのみを保持する内部結合の適切な構文です。

 SELECT tblProducts.name, 
    tblProducts.description, 
    tblProducts.price, 
    tblProducts.qtyInStock, 
    tblProducts.image,
    tblProducts.colour,
    tblProducts.size,
    tblProducts.style,
    tblProdCat.prodCatID 

  FROM tblProducts
  INNER JOIN tblProdCat ON tblProdCat.productId= tblProducts.productId
  INNER JOIN tblCategory ON tblCategory ON tblCategory.categoryId = tblProdCat.categoryId
  WHERE tblCategory.categoryName='Pens' 

一部のカテゴリ ID が欠落している可能性があり、それらの行が必要な場合は、LEFT JOIN を実行するのが賢明です。

 SELECT tblProducts.name, 
    tblProducts.description, 
    tblProducts.price, 
    tblProducts.qtyInStock, 
    tblProducts.image,
    tblProducts.colour,
    tblProducts.size,
    tblProducts.style,
    tblProdCat.prodCatID 

  FROM tblProducts
  LEFT JOIN tblProdCat ON tblProdCat.productId= tblProducts.productId
  LEFT JOIN tblCategory ON tblCategory ON tblCategory.categoryId = tblProdCat.categoryId
  WHERE tblCategory.categoryName='Pens' 

これにより、他の 2 つのテーブルに対応するレコードが存在するかどうかに関係なく、tblProducts からすべてのレコードが返されます。

于 2013-03-15T17:13:37.427 に答える