-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 个结果,但它必须给我 4 个结果,因为有 4 个数据categoryID='2'

我也从这个查询中检查过,有 4 个数据categoryID='2'

 select * from Products;
4

3 回答 3

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'

即使表中没有匹配的行,ALEFT JOIN也会返回所有。将仅返回两个表中匹配的行。ProductsProductPhotoINNER JOIN

如果您在学习JOIN语法方面需要帮助,那么这里有一个很好的联接的可视化解释

于 2013-02-03T23:20:27.437 回答
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'

尝试使用左连接,可能没有生产照片记录匹配产品。

于 2013-02-03T23:21:49.517 回答
0

请注意,您正在对 ProductID 上的 ProductPhoto 执行 INNER JOIN,该 ProductID 等于 Products 中的 ID。

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

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

于 2013-02-03T23:23:45.703 回答