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