0

我正在尝试从基于另一个表的两个表中提取数据。

所以..我有这些表:

 **tblCategory**
 CategoryID, CategoryName

 **tblProdCat**
 prodCatID, productID, categoryID

 **tblProducts**
 productID, description, price

我需要加入表格并从 tblProdCat 和 tblProducts 中找到信息,而我只能使用 CategoryName。

   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在每个表之间使用了一个,它将返回每个表之间匹配的所有行。

如果您在学习JOIN语法方面需要帮助,这里有一个很好的 Joins 可视化解释

现在,如果你想返回所有Products它是否有一个类别,那么你可以使用 a 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

这是内连接的正确语法,它将只保留具有匹配行类别 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' 

这将返回来自 tblProducts 的所有记录,而不管其他两个表中是否存在相应的记录。

于 2013-03-15T17:13:37.427 回答
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 回答