我正在尝试从另一个表中提取数据。
所以..我有这些表:
**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
我已经尝试了上述内容并尝试了其他连接,但是拉出了我的头发。我已经阅读了教程,只是不明白连接是如何工作的。有人可以帮忙吗?请..
答案 0 :(得分: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
语法,这里有一个很棒的visual explanation of Joins。
现在,如果您想要返回所有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'
答案 1 :(得分:0)
这是Inner join的正确语法,它只保留匹配行类别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的所有记录,无论其他两个表中是否存在相应的记录。
答案 2 :(得分: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**