2013-02-03 56 views
-1

我需要帮助我的查询:需要帮助我的查询

SELECT 
P.ID, 
P.CategoryID, 
P.Name, 
P.SupplierID, 
p.UnitPrice, 
p.UnitsInStock, 
pp.PicturePath 
FROM Products P JOIN ProductPhoto PP ON p.ID=PP.ProductID WHERE P.CategoryID='2'; 

该查询给了我2分的结果,但它必须给我个结果,因为有其categoryID='2'

而且我已经检查了4个数据从该查询并有4个数据,其categoryID='2'

select * from Products; 

回答

2

你会希望有一个LEFT JOIN

SELECT P.ID, 
    P.CategoryID, 
    P.Name, 
    P.SupplierID, 
    p.UnitPrice, 
    p.UnitsInStock, 
    pp.PicturePath 
FROM Products P 
LEFT JOIN ProductPhoto PP 
    ON p.ID=PP.ProductID 
WHERE P.CategoryID='2' 

A LEFT JOIN将返回全部Products即使ProductPhoto表中没有匹配的行。 INNER JOIN将只返回两个表中匹配的行。

如果您需要帮助学习JOIN语法那么这里是一个伟大的visual explanation of Joins

+0

感谢übluefeet它的工作 –

0
SELECT 
P.ID, 
P.CategoryID, 
P.Name, 
P.SupplierID, 
p.UnitPrice, 
p.UnitsInStock, 
pp.PicturePath 
FROM Products P LEFT JOIN ProductPhoto PP ON p.ID=PP.ProductID WHERE P.CategoryID='2' 

尝试使用左加入,有可能是没有productionPhoto记录匹配的产品。

0

请注意,您正在产品ID上的ProductPhoto上进行INNER JOIN,该产品ID等于产品中的ID。

如果在两个表中只有2个匹配的行的categoryID为2,那么这就是所有您将看到的返回。

将您的查询更改为LEFT JOIN并查看您的4行是否返回。如果他们是,那么你的上面的查询是正确的。