Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL连接3个表_Sql - Fatal编程技术网

SQL连接3个表

SQL连接3个表,sql,Sql,我试图根据另一个表从两个表中提取数据 所以。。我有这些桌子: **tblCategory** CategoryID, CategoryName **tblProdCat** prodCatID, productID, categoryID **tblProducts** productID, description, price 我需要加入表并从tblProdCat和tblProducts查找信息,其中只有CategoryName对我可用 SELECT tblProduc

我试图根据另一个表从两个表中提取数据

所以。。我有这些桌子:

 **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

我试过上面的方法,也试过其他方法,但都是拔头发。我读过教程,只是不明白连接是如何工作的。有人能帮忙吗?请..

您将需要使用以下
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' 
我在每个表之间使用了一个
内部联接
,它将返回每个表之间匹配的所有行

如果您需要学习
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' 

这是内部联接的正确语法,它只保留具有匹配行类别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可能丢失,并且您需要这些行,则谨慎地执行左联接:

 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中的所有记录,而不管其他两个表中是否存在相应的记录。

是否希望项目和产品类别在结果中显示为单独的行?
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**