2013-03-15 166 views
0

我試圖從兩個表中基於另一個拉數據。SQL加入3個表格

所以..我有這些表:

**tblCategory** 
CategoryID, CategoryName 

**tblProdCat** 
prodCatID, productID, categoryID 

**tblProducts** 
productID, description, price 

我需要加入的表,找到從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 

我試過以上,也試過其他連接,但拉我的頭髮。我讀過教程,只是不明白連接是如何工作的。任何人都可以幫忙嗎?請..

+0

是否希望項目和產品類別在結果中顯示爲單獨的行? – 2013-03-15 17:17:06

回答

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' 
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返回所有記錄,而不管在相應的記錄的存在另外兩張桌子。

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